Procházet zdrojové kódy

修复添加Job BUG

insomniaLee před 5 roky
rodič
revize
1b7851e300

+ 4 - 0
pom.xml

@@ -38,6 +38,10 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-thymeleaf</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.thymeleaf.extras</groupId>
+            <artifactId>thymeleaf-extras-java8time</artifactId>
+        </dependency>
 
         <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
         <dependency>

+ 83 - 6
src/main/java/com/mooctest/controller/JobController.java

@@ -1,29 +1,42 @@
 package com.mooctest.controller;
 
+import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.mooctest.data.ResponseDTO;
 import com.mooctest.service.JobService;
 import com.mooctest.service.PaperService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.ui.Model;
 
-import javax.jws.WebParam;
-import java.awt.event.MouseEvent;
+
+import java.sql.Timestamp;
 import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.List;
 
 @Controller
 @RequestMapping(value = "/review")
 public class JobController {
 
+    /**
+     * 用于reviewJob  众包审核系统的review
+     */
+    @Value("${report.host}")
+    String reportHost;
     @Autowired
     PaperService paperService;
 
     @Autowired
     JobService jobService;
 
+
+
+
     @GetMapping(value = "job")
     public String getJob ( Model model, @RequestParam("paperId") String paperId){
         // paperId 是这次Job任务所采用的paper的id
@@ -33,20 +46,48 @@ public class JobController {
         return "addReviewJob";
     }
 
-    @PutMapping(value = "job")
+    //添加一个JOB
+    @PostMapping(value = "job")
     @ResponseBody
     public JSONObject postJon ( @RequestParam("paperId")String paperId,@RequestParam("time")String time,
                             @RequestParam("name") String name, @RequestParam("description") String descriptioin,
-                            @RequestParam("group")String group , @RequestParam("workNum") int workNum,
-                            @RequestParam("itemGroupList") String itemGroupList){
-        JSONObject data = jobService.addJob(name,descriptioin,time,paperId,getUserList(workNum),itemGroupList);
+                            @RequestParam("workNum") int workNum,
+                            @RequestParam("itemGroupList") String itemGroupList, @RequestParam("crossCertify") String crossCertify,
+                            @RequestParam("crossCertifyNum") int crossCertifyNum){
+        JSONObject data = jobService.addJob(name,descriptioin,time,paperId,new ArrayList<String>(),itemGroupList,workNum,crossCertify,crossCertifyNum);
+        return data;
+    }
+
+    //修改现有的JOB
+    @PostMapping(value = "/changejob")
+    @ResponseBody
+    public JSONObject putJob (  @RequestParam("jobId") String jobId,
+                                @RequestParam("paperId") String paperId,@RequestParam("time")String time,
+                                @RequestParam("name") String name, @RequestParam("description") String descriptioin,
+                                @RequestParam("workers")List<String> workers , @RequestParam("workNum") int workNum,
+                                @RequestParam("itemGroupList") String itemGroupList, @RequestParam("crossCertify") String crossCertify,
+                                @RequestParam("crossCertifyNum") int crossCertifyNum){
+        JSONObject data = jobService.changeJob(jobId,name,descriptioin,time,paperId,workers,itemGroupList,workNum,crossCertify,crossCertifyNum);
         return data;
     }
 
     @GetMapping(value = "/jobs")
     public String jobs (Model model){
         JSONArray jsonArray = jobService.getJobs(); // 所有的数据
+        for (Object single : jsonArray){
+            JSONObject temp = (JSONObject) single;
+            temp.put("create_time",new Timestamp(Long.parseLong(temp.get("create_time").toString()))); // 修改创建时间的格式  以便前段展示
+        }
+//        Collections.sort(jsonArray, new Comparator<Object>() {
+//            @Override
+//            public int compare(Object o1, Object o2) {
+//                JSONObject jso1 = (JSONObject) o1;
+//                JSONObject jso2 = (JSONObject) o2;
+//                return ((Timestamp)jso1.get("create_time")).compareTo((Timestamp)jso2.get("create_time"));
+//            }
+//        });
         model.addAttribute("tasks",jsonArray);
+        model.addAttribute("reportHost",reportHost);
         return "jobList";
     }
 
@@ -57,6 +98,33 @@ public class JobController {
         return "jobDetail";
     }
 
+    @GetMapping(value = "/changeJob")
+    public String change ( Model model , @RequestParam("id") String id){
+        //参数为对应JOB的id
+        try {
+            JSONObject detail = jobService.getSinglePaper(id);
+            model.addAttribute("job",detail);
+            JSONObject paper = paperService.getSinglePaper((String)detail.get("paper_id"));
+            model.addAttribute("paper",paper);
+            String distribute  = jobService.getDistribution(id);
+            model.addAttribute("distribute" , distribute);
+            String workerStr = jobService.getWrokers(id).toString();
+            model.addAttribute("workers",workerStr.substring(1,workerStr.length()-1));
+            model.addAttribute("reportHost",reportHost);
+            return "changeReviewJob";
+        }catch (Exception e){
+            //返回异常,
+            return "error";
+        }
+    }
+
+//    @PostMapping(value = "jobDistribute")
+//    public ResponseDTO jobDistribute (@RequestParam("id")String jobId){
+//        //huoqu fenpei xinxi
+//
+//    }
+
+
 
     private List<String> getUserList(int i ){
         List<String > res = new ArrayList<>();
@@ -66,4 +134,13 @@ public class JobController {
         return res;
     }
 
+    private boolean isEdu(JSONObject job ){
+        // is the job form edu
+        try {
+return true;
+        }catch (Exception x){
+            return false;
+        }
+    }
+
 }

+ 0 - 7
src/main/java/com/mooctest/controller/PaperController.java

@@ -43,13 +43,6 @@ public class PaperController {
         return "paper_list";
     }
 
-    @GetMapping("/testSinglePaperJson")
-    @ResponseBody
-    public JSONObject hello ( @RequestParam("id") String id ){
-        String paperId = "5dc7be4bc9e77c000ecf0ee5";
-        JSONObject res = paperService.getSinglePaper(id);
-        return res;
-    }
 
     @GetMapping("/changePaper")
     public String changeTask ( Model model ,@RequestParam("id") String id ){

+ 10 - 0
src/main/java/com/mooctest/data/ResponseDTO.java

@@ -0,0 +1,10 @@
+package com.mooctest.data;
+
+import lombok.Data;
+
+@Data
+public class ResponseDTO {
+    //statue will be success and fail
+    private String status;
+    private Object data;
+}

+ 77 - 11
src/main/java/com/mooctest/service/JobService.java

@@ -3,6 +3,7 @@ package com.mooctest.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
@@ -17,11 +18,16 @@ import java.nio.charset.Charset;
 import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 @Service
 public class JobService {
     //  转发 job的请求
 
+    @Value("${report.host}")
+    String reportHost ;
+    private final String HTTP = "http://";
+
 
 
 
@@ -30,14 +36,17 @@ public class JobService {
         return res;
     }
 
-    public JSONObject addJob (String name, String desciption, String time, String paperId, List<String> userList, String workDistribution){
+
+    public JSONObject changeJob (String jobId,String name, String desciption, String time, String paperId, List<String> userList, String workDistribution,
+                                 int workNum,String crossCertify,int crossCertifyNum){
         RestTemplate template = new RestTemplate();
         if(!time.contains(" - ")){
             return null;
         }
         String times []=time.split(" - ");
-        String url = "http://47.99.140.117:9090/Bug/api/job/uploadJob";
+        String url = HTTP+reportHost+"/Bug/api/job/updateJob";
         MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("jobId",jobId);
         paramMap.add("name", name);
         paramMap.add("description", desciption);
         paramMap.add("paperId", paperId);
@@ -45,16 +54,57 @@ public class JobService {
         paramMap.add("endTime", times[1]);
         paramMap.add("workerList", userList);
         paramMap.add("workerDistribution", workDistribution);
+        paramMap.add("isCrossValidation", crossCertify.equals("是"));
+        paramMap.add("validationNum", crossCertifyNum);
+        paramMap.add("maxWorker",workNum);
+//        System.out.println(paramMap.toString());
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        JSONObject tasksJson = JSON.parseObject(response2.getBody());
+        return  tasksJson;
+    }
 
+    public JSONObject addJob (String name, String desciption, String time, String paperId, List<String> userList, String workDistribution,
+                              int workNum,String crossCertify,int crossCertifyNum){
+        RestTemplate template = new RestTemplate();
+        if(!time.contains(" - ")){
+            return null;
+        }
+        String times []=time.split(" - ");
+        String url = HTTP+reportHost+"/Bug/api/job/uploadJob";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("name", name);
+        paramMap.add("description", desciption);
+        paramMap.add("paperId", paperId);
+        paramMap.add("startTime", times[0]);
+        paramMap.add("endTime", times[1]);
+        paramMap.add("workerList", userList);
+        paramMap.add("workerDistribution", workDistribution);
+        paramMap.add("isCrossValidation", crossCertify.equals("是"));
+        paramMap.add("validationNum", crossCertifyNum);
+        paramMap.add("maxWorker",workNum);
 //        System.out.println(paramMap.toString());
         template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
         HttpHeaders headers = new HttpHeaders();
         HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
         ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
         JSONObject tasksJson = JSON.parseObject(response2.getBody());
-//        System.out.prin;
-//        JSONObject resJson = JSON.parseObject(tasksJson.getString("json"));
-//        resJson.put("paperId", tasksJson.getString("paper_id"));
+        return  tasksJson;
+    }
+
+
+    public JSONObject getSinglePaper ( String jobId){
+        RestTemplate template = new RestTemplate();
+        String url = HTTP+reportHost+"/Bug/api/job/getJob";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("job_id", jobId);
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        JSONObject tasksJson = JSON.parseObject(response2.getBody());
         return  tasksJson;
     }
 
@@ -65,21 +115,37 @@ public class JobService {
         List<HttpMessageConverter<?>> list=new ArrayList<HttpMessageConverter<?>>();
         list.add(stringHttpMessageConverter);
         rt.setMessageConverters(list);
-        String str = "http://47.99.140.117:9090/Bug/api/job/getJobs";
+        String str = HTTP+reportHost+"/Bug/api/job/getJobs";
         JSONArray tasksJson = JSON.parseArray(rt.getForObject(str , String.class));
         return tasksJson;
     }
 
-    public JSONObject getSinglePaper ( String jobId){
+    public String getDistribution (String jobId){
         RestTemplate template = new RestTemplate();
-        String url = "http://47.99.140.117:9090/Bug/api/job/getJob";
+        String url = HTTP+reportHost+"/Bug/api/job/getWorkerDistribution";
         MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
-        paramMap.add("job_id", jobId);
+        paramMap.add("jobId", jobId);
         template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
         HttpHeaders headers = new HttpHeaders();
         HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
         ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
-        JSONObject tasksJson = JSON.parseObject(response2.getBody());
-        return  tasksJson;
+        return  response2.getBody();
+    }
+
+    public List<String> getWrokers ( String jobId){
+        List<String> workers = new ArrayList<>();
+        RestTemplate template = new RestTemplate();
+        String url = HTTP+reportHost+"/Bug/api/review/getWorkersByJob";
+        MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
+        paramMap.add("jobId", jobId);
+        template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
+        HttpHeaders headers = new HttpHeaders();
+        HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<MultiValueMap<String, Object>>(paramMap,headers);
+        ResponseEntity<String> response2 = template.postForEntity(url, httpEntity, String.class);
+        String originStr = response2.getBody();
+        JSONArray array = JSON.parseArray(originStr);
+        List<String> workers2 = array.stream().map( s-> ((JSONObject)s).get("id").toString() ).collect(Collectors.toList());
+        return  workers2;
     }
+
 }

+ 8 - 3
src/main/java/com/mooctest/service/PaperService.java

@@ -3,6 +3,7 @@ package com.mooctest.service;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpHeaders;
 import org.springframework.http.ResponseEntity;
@@ -21,6 +22,10 @@ import java.util.List;
 @Service
 public class PaperService {
 
+    @Value("${report.host}")
+    private String reportHost;
+    private final String HTTP = "http://";
+
 
     public JSONArray getPaperData(){
         RestTemplate rt = new RestTemplate();
@@ -28,14 +33,14 @@ public class PaperService {
         List<HttpMessageConverter<?>> list=new ArrayList<HttpMessageConverter<?>>();
         list.add(stringHttpMessageConverter);
         rt.setMessageConverters(list);
-        String str = "http://47.99.140.117:9090/Bug/api/paper/getPapers";
+        String str = HTTP+reportHost+"/Bug/api/paper/getPapers";
         JSONArray tasksJson = JSON.parseArray(rt.getForObject(str , String.class));
         return tasksJson;
     }
 
     public JSONObject deletePaper (String paperId){
         RestTemplate template = new RestTemplate();
-        String url = "http://47.99.140.117:9090/Bug/api/paper/delPaper";
+        String url = HTTP+reportHost+"/Bug/api/paper/delPaper";
         MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
         paramMap.add("paperId", paperId);
         template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));
@@ -50,7 +55,7 @@ public class PaperService {
 
     public JSONObject getSinglePaper ( String paperId){
         RestTemplate template = new RestTemplate();
-        String url = "http://47.99.140.117:9090/Bug/api/paper/getPaperJson";
+        String url = HTTP+reportHost+"/Bug/api/paper/getPaperJson";
         MultiValueMap<String, Object> paramMap = new LinkedMultiValueMap<String, Object>();
         paramMap.add("paperId", paperId);
         template.getMessageConverters().set(1, new StringHttpMessageConverter(StandardCharsets.UTF_8));

+ 1 - 4
src/main/java/com/mooctest/util/Doc2VecUtil.java

@@ -12,20 +12,17 @@ public class Doc2VecUtil {
 
     public static DocVectorModel loadModel() {
         if (docVectorModel == null) {
-
             synchronized (Doc2VecUtil.class) {
                 if (docVectorModel == null) {
-
                     try {
 //                        docVectorModel = new DocVectorModel(new WordVectorModel("/project/sgns.wiki.word"));
-                        docVectorModel = new DocVectorModel(new WordVectorModel("/Users/insomnialee/Desktop/sgns.wiki.word"));
+                        docVectorModel = new DocVectorModel(new  WordVectorModel("/Users/insomnialee/Desktop/sgns.wiki.word"));
                     } catch (IOException e) {
                         e.printStackTrace();
                     }
                 }
             }
         }
-
         return docVectorModel;
     }
 

+ 77 - 12
src/main/resources/static/js/addReviewJob.js

@@ -146,24 +146,89 @@ getNewRatioIndex = function () {
     return ratioIndex;
 }
 
+changeJob = function(){
+    //type  = 0  表示添加
+    // type = 1 表示修改
+    // 遍历页面上的数据,生成json数据。
+    var data = new FormData();
+    data.append("jobId",jobId)
+    data.append('name',$('#name').val());
+    data.append('description',$('#description').val());
+    data.append('paperId',id);
+    data.append('time',$('#reservationtime').val());
+    data.append('workNum',$('#workNum').val());
+    data.append('crossCertify',$('#crossCertify').val());
+    data.append('crossCertifyNum',$('#certifyNum').val());
+    data.append('itemGroupList',$('#deliverInfo').val());
+    data.append('workers',$('#workList').val());
+    console.log(data)
+    $.ajax({
+        url: '/review/changejob',
+        data:data,
+        type: 'POST',
+        processData: false,
+        contentType: false,
+        success: function (result) {
+            if(result['status'] == 'fail'){
+                $.notify({
+                    message: result['message']
+                },{
+                    // settings
+                    delay: 100,
+                    timer: 1000,
+                    type: 'error'
+                });
+            }else if(result['status'] == 'success'){
+                var jobId = result['jobId'];
+                console.log(jobId)
+                $.notify({
+                    message: '修改成功'
+                },{
+                    // settings
+                    delay: 100,
+                    timer: 3000,
+                    type: 'success'
+                });
+            }
+        }
+    });
+}
+
+
 generateJson = function( type ){
+    //type  = 0  表示添加
+    // type = 1 表示修改
     // 遍历页面上的数据,生成json数据。
+    var url,ajaxType ;
+    var data = new FormData();
+    if(type == 1){
+        //change
+        data.append("jobId",jobId)
+        ajaxType = 'PUT'
+    }else{
+        //add
+        ajaxType = 'POST'
+    }
+    data.append('name',$('#name').val());
+    data.append('description',$('#description').val());
+    data.append('paperId',id);
+    data.append('time',$('#reservationtime').val());
+    // data.append('group',$('#workerGroup').val());
+
+    data.append('workNum',$('#workNum').val());
+    data.append('crossCertify',$('#crossCertify').val());
+    data.append('crossCertifyNum',$('#certifyNum').val());
+    data.append('itemGroupList',$('#deliverInfo').val());
+    console.log(data.toString())
     $.ajax({
         url: '/review/job',
-        data:{
-            'name':$('#name').val(),
-            'description':$('#description').val(),
-            'paperId':id,
-            'time':$('#reservationtime').val(),
-            'group':$('#workerGroup').val(),
-            'workNum':$('#workNum').val(),
-            'itemGroupList':$('#deliverInfo').val()
-        },
-        type: 'PUT',
+        data:data,
+        type: ajaxType,
+        processData: false,
+        contentType: false,
         success: function (result) {
             // alert(result);
             // console.log(result);
-
             if(result['status'] == 'fail'){
                 $.notify({
                     // options
@@ -180,7 +245,7 @@ generateJson = function( type ){
                 console.log(jobId)
                 $.notify({
                     // options
-                    message: '添加成功,jobid为'+jobId
+                    message: type==0?'添加成功,jobid为'+jobId:'修改成功'
                 },{
                     // settings
                     delay: 100,

+ 32 - 32
src/main/resources/templates/addReviewJob.html

@@ -183,7 +183,7 @@
                         <!-- Date and time range -->
                         <div class="form-group">
                             <label class="col-sm-2 control-label" >时间</label>
-                            <div class=" col-sm-10">
+                            <div class=" col-sm-8">
                                 <!--                                <div class="input-group-addon">-->
                                 <!--                                    <i class="fa fa-clock-o"></i>-->
                                 <!--                                </div>-->
@@ -192,19 +192,33 @@
                             <!-- /.input group -->
                         </div>
                         <!-- select -->
-
-
                         <!-- text input -->
+<!--                        <div class="form-group">-->
+<!--                            <label class="col-sm-2 control-label">工人组</label>-->
+<!--                            <div class="col-sm-8">-->
+<!--                                <input id="workerGroup" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入工人组"/>-->
+<!--                            </div>-->
+<!--                        </div>-->
+                        <!-- select -->
                         <div class="form-group">
-                            <label class="col-sm-2 control-label">工人组</label>
-                            <div class="col-sm-10">
-                                <input id="workerGroup" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入工人组"/>
+                            <label class="col-sm-2 control-label" >交叉认证</label>
+                            <div class=" col-sm-1">
+                                <select onchange="changeCertify()" class="form-control" id="crossCertify">
+                                    <option>否</option>
+                                    <option>是</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group" id="certifyBlock" style="display: none">
+                            <label class="col-sm-2 control-label">交叉验证人数</label>
+                            <div class="col-sm-8">
+                                <input id="certifyNum" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入交叉验证人数"/>
                             </div>
                         </div>
                         <!-- text input -->
                         <div class="form-group">
-                            <label class="col-sm-2 control-label">工人总数</label>
-                            <div class="col-sm-10">
+                            <label class="col-sm-2 control-label">最大工人总数</label>
+                            <div class="col-sm-8">
                                 <input id="workNum" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入工人总数"/>
                             </div>
                         </div>
@@ -325,6 +339,7 @@
     $(document).ready(function(){
         $('[data-toggle="tooltip"]').tooltip();
 
+
         //Initialize Select2 Elements
         $('.select2').select2()
 
@@ -338,8 +353,7 @@
         // $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, format: 'MM/DD/YYYY h:mm A' })
         $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, locale: { format: 'MM/DD/YYYY hh:mm A' }})
         //Date range as a button
-        $('#daterange-btn').daterangepicker(
-            {
+        $('#daterange-btn').daterangepicker({
                 ranges   : {
                     'Today'       : [moment(), moment()],
                     'Yesterday'   : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
@@ -356,33 +370,19 @@
             }
         )
 
-        //Date picker
-        $('#datepicker').datepicker({
-            autoclose: true
-        })
-
-
-
-
-        //Timepicker
-        $('.timepicker').timepicker({
-            showInputs: false
-        })
-
-        var taskListTable = $('#task-list').DataTable({
-            searching: true,
-            pageLength: 25
-        });
     });
 
     showPaperDetail = function (paperId) {
         window.open("/paperDetail?id="+paperId);
     }
 
-
-
-
-
-
+    changeCertify = function () {
+        var ceirity = $("#crossCertify").val();
+        if(ceirity == '是'){
+            $('#certifyBlock').css('display','block');
+        }else{ // fou
+            $('#certifyBlock').css('display','none');
+        }
+    }
 
 </script>

+ 450 - 0
src/main/resources/templates/changeReviewJob.html

@@ -0,0 +1,450 @@
+<!DOCTYPE html>
+<html lang="zh-CN" xmlns:th="http://www.thymeleaf.org"
+      xmlns:layout="http://www.ultraq.net.nz/web/thymeleaf/layout"
+      layout:decorator="base">
+<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"/>
+    <style>
+        body {
+            padding-right: 0px !important;
+        }
+        *.modal-open {
+            overflow-y: scroll;
+            padding-right: 0 !important;
+        }
+        .content {
+            padding-left: 45px;
+            padding-right: 45px;
+        }
+        .box {
+            margin-bottom: 50px;
+        }
+        .box-header button{
+            margin-right: 5px;
+        }
+        .table tr td {
+            padding-right: 10px;
+            padding-left: 10px;
+            border-top: 1px solid #f4f4f4;
+            border-right: 1px solid #f4f4f4;
+        }
+
+        td .form-group {
+            margin-bottom: 0px;
+        }
+    </style>
+</head>
+<body>
+<div layout:fragment="mainbody">
+
+
+
+    <aside class="main-sidebar">
+        <section class="sidebar">
+            <div class="user-panel">
+                <div class="pull-left image">
+                    <img src="/static/images/avatar/avatar-admin.jpg" class="img-circle" alt="User Image" />
+                </div>
+                <div class="pull-left info">
+                    <p>Admin</p>
+                    <a href="#">
+                        <i class="fa fa-circle text-success"></i>
+                        Online
+                    </a>
+                </div>
+            </div>
+
+            <!-- Search form -->
+            <form action="#" method="get" class="sidebar-form">
+                <div class="input-group">
+                    <input type="text" name="q" class="form-control" placeholder="Search..." />
+                    <span class="input-group-btn">
+						<button type="submit" name="search" id="search-btn" class="btn btn-flat">
+							<i class="fa fa-search"></i>
+						</button>
+					</span>
+                </div>
+            </form>
+
+            <!-- Sidebar Menu -->
+            <ul class="sidebar-menu tree" data-widget="tree">
+                <li>
+                    <a href="/addPaper">
+                        <i class="glyphicon glyphicon-pencil"></i>
+                        <span>
+                            新建任务
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/papers">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            众审任务列表
+                        </span>
+                    </a>
+                </li>
+
+                <li>
+                    <a href="/review/jobs">
+                        <i class="glyphicon glyphicon-tasks"></i>
+                        <span>
+                            JOB列表
+                        </span>
+                    </a>
+                </li>
+
+            </ul>
+
+
+        </section>
+    </aside>
+
+
+    <div class="content-wrapper">
+        <!-- Content Header (Page header) -->
+        <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="#">修改众审任务</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="changeJob()">
+                        保存
+                    </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">采用的Paper</label>
+                            <div class="col-sm-10">
+                                <a type="button"  th:onclick="'showPaperDetail(\''+${paper.get('paperId')}+'\')'"  id="paperId" th:text="${paper.get('name')}" ></a>
+                            </div>
+                        </div>
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">名称</label>
+                            <div class="col-sm-10">
+                                <input  onchange="checkNull(event)" th:value="${job.get('name')}" class="form-control" id="name" placeholder="请输入Job任务名称"/>
+                            </div>
+                        </div>
+                        <!-- textarea -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">描述</label>
+                            <div class="col-sm-10">
+                                <textarea onchange="checkNull(event)" th:text="${job.get('description')}" id="description" class="form-control" rows="3" placeholder="请输入描述信息"></textarea>
+                            </div>
+                        </div>
+
+                        <!-- Date and time range -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label" >时间</label>
+                            <div class=" col-sm-10">
+                                <!--                                <div class="input-group-addon">-->
+                                <!--                                    <i class="fa fa-clock-o"></i>-->
+                                <!--                                </div>-->
+                                <input type="text" class="form-control pull-right" id="reservationtime"/>
+                            </div>
+                            <!-- /.input group -->
+                        </div>
+                        <!-- select -->
+
+                        <!-- text input -->
+<!--                        <div class="form-group">-->
+<!--                            <label class="col-sm-2 control-label">工人组</label>-->
+<!--                            <div class="col-sm-10">-->
+<!--                                <input id="workerGroup" onchange="checkNum(event)" th:value="${job.get('group')}"  type="text" class="form-control" placeholder="请输入工人组"/>-->
+<!--                            </div>-->
+<!--                        </div>-->
+                        <!-- select -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label" >交叉认证</label>
+                            <div class=" col-sm-1">
+                                <select onchange="changeCertify()" class="form-control" id="crossCertify" >
+                                    <option>否</option>
+                                    <option>是</option>
+                                </select>
+                            </div>
+                        </div>
+                        <div class="form-group" id="certifyBlock" style="display: none">
+                            <label class="col-sm-2 control-label">交叉验证人数</label>
+                            <div class="col-sm-8">
+                                <input id="certifyNum" th:value="${job.get('validationNum')}" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入交叉验证人数"/>
+                            </div>
+                        </div>
+                        <!-- text input -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">最大工人总数</label>
+                            <div class="col-sm-8">
+<!--                                xuao xiugai wei maxWorker-->
+                                <input id="workNum"  th:value="${job.get('validationNum')}" onchange="checkNum(event)"  type="text" class="form-control" placeholder="请输入工人总数"/>
+                            </div>
+                        </div>
+                        <!-- textarea -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">工人列表</label>
+                            <div class="col-sm-10">
+                                <textarea class="form-control" th:text="${workers}" id="workList" onchange="checkNull(event)" rows="8" placeholder="请输入逗号分割的工人信息"></textarea>
+                            </div>
+                        </div>
+                        <!-- textarea -->
+                        <div class="form-group">
+                            <label class="col-sm-2 control-label">报告分配信息</label>
+                            <div class="col-sm-10">
+                                <textarea class="form-control" th:text="${distribute}" id="deliverInfo" onchange="checkNull(event)" rows="8" placeholder="请输入json格式的报告分配信息"></textarea>
+                            </div>
+                        </div>
+                    </form>
+                </div>
+            </div>
+        </section>
+    </div>
+
+    <div class="modal fade" id="modal-default">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalBody">
+                    <form class="form-horizontal" id="formBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+
+    <div class="modal fade" id="modal-alert">
+        <div class="modal-dialog">
+            <div class="modal-content">
+                <div class="modal-header">
+                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
+                        <span aria-hidden="true">&times;</span></button>
+                    <h4 class="modal-title">预览</h4>
+                </div>
+                <div class="modal-body" id="modalAlertBody">
+                    <form class="form-horizontal" id="formAlertBody">
+
+                    </form>
+
+                </div>
+                <div class="modal-footer">
+                    <button type="button" class="btn btn-default pull-left" data-dismiss="modal">关闭</button>
+                    <!--                    <button type="button" class="btn btn-primary"></button>-->
+                </div>
+            </div>
+            <!-- /.modal-content -->
+        </div>
+        <!-- /.modal-dialog -->
+    </div>
+    <!-- /.modal -->
+
+
+</div>
+
+
+</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>
+<!-- AdminLTE App -->
+<!--<script src="/static/AdminLTE/dist/js/adminlte.min.js"></script>-->
+<!-- AdminLTE for demo purposes -->
+<script src="/static/AdminLTE/dist/js/demo.js"></script>
+<!-- add Task js for this file only -->
+<script src="/static/js/addReviewJob.js"></script>
+<script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
+<script type="text/javascript" xmlns:th="http://www.thymeleaf.org" th:inline="javascript">
+
+    var ruleId ;
+    var ratioIndex;
+
+    /*<![CDATA[*/
+    var id = [[${paper.get('paperId')}]];
+    var startTime = [[${job.get('start_time')}]]
+    var endTime = [[${job.get('end_time')}]]
+    var jobId = [[${job.get('id')}]]
+    var reportHost = [[${reportHost}]]
+    var crossValidation = [[${job.get('crossValidation')}]]
+    /*]]>*/
+
+
+    $(document).ready(function(){
+        $('[data-toggle="tooltip"]').tooltip();
+
+        //Initialize Select2 Elements
+        $('.select2').select2()
+
+        ruleId = 0;
+        ratioIndex =0 ;
+        $('#deliverInfo').val(getCleanStr($('#deliverInfo').val()));
+        //setShowDistribute($('#deliverInfo').val());
+        $('#crossCertify').val(crossValidation?'是':'否')
+        changeCertify();
+
+
+        //Date range picker
+        $('#reservation').daterangepicker()
+        //Date range picker with time picker
+        // $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, format: 'MM/DD/YYYY h:mm A' })
+        $('#reservationtime').daterangepicker({ timePicker: true, timePickerIncrement: 30, locale: {
+                                                                format: 'MM/DD/YYYY hh:mm A' },
+                                                                startDate: startTime,
+                                                                endDate: endTime})
+        //Date range as a button
+        $('#daterange-btn').daterangepicker(
+            {
+                ranges   : {
+                    'Today'       : [moment(), moment()],
+                    'Yesterday'   : [moment().subtract(1, 'days'), moment().subtract(1, 'days')],
+                    'Last 7 Days' : [moment().subtract(6, 'days'), moment()],
+                    'Last 30 Days': [moment().subtract(29, 'days'), moment()],
+                    'This Month'  : [moment().startOf('month'), moment().endOf('month')],
+                    'Last Month'  : [moment().subtract(1, 'month').startOf('month'), moment().subtract(1, 'month').endOf('month')]
+                },
+                startDate: moment().subtract(29, 'days'),
+                endDate  : moment()
+            },
+            function (start, end) {
+                $('#daterange-btn span').html(start.format('MMMM D, YYYY') + ' - ' + end.format('MMMM D, YYYY'))
+            }
+        )
+
+        //Date picker
+        $('#datepicker').datepicker({
+            autoclose: true
+        })
+
+
+        //Timepicker
+        $('.timepicker').timepicker({
+            showInputs: false
+        })
+
+        var taskListTable = $('#task-list').DataTable({
+            searching: true,
+            pageLength: 25
+        });
+    });
+
+
+
+    showPaperDetail = function (paperId) {
+        window.open("/paperDetail?id="+paperId);
+    }
+
+
+    /*<![CDATA[*/
+    // setShowDistribute = function (str) {
+    //     var obj = eval('(' + str + ')');
+    //     console.log(obj)
+    //     var body = $('#deliverInfo');
+    //     var temp ;
+    //     for (var i = 0 ; i < obj.length; i++){
+    //         temp = obj[i]
+    //         body.append(showSingleDistribute(temp))
+    //     }
+    // };
+    //
+    // showSingleDistribute = function  ( obj ){
+    //     return '<div class="morris-hover morris-default-style col-lg-3 col-sm-6 col-md-4" >\n' +
+    //         '                                                <div class="callout callout-my">\n' +
+    //         '                                                    <p><span class="show-report-left">name:</span>'+getShortDes(obj['name'],20)+'</p>\n' +
+    //         '                                                    <p><span class="show-report-left">description:</span>'+getShortDes(obj['description'],20)+'</p>\n' +
+    //         '                                                    <p><span class="show-report-left">reportList:</span><span class="label bg-green">'+getShortDes(obj['report'],20)+'</span></p>\n' +
+    //         '                                                    <p><span class="show-report-left">userList:</span><span class="label bg-green">'+getShortDes(obj['worker'],20)+'</span></p>\n' +
+    //         '                                                </div>\n' +
+    //         '                                            </div>'
+    // };
+    /*]]>*/
+    changeCertify = function () {
+        var ceirity = $("#crossCertify").val();
+        if(ceirity == '是'){
+            $('#certifyBlock').css('display','block');
+        }else{ // fou
+            $('#certifyBlock').css('display','none');
+        }
+    }
+
+    getShortDes = function (test, length ) {
+        if(test.length>length+1){
+            return test.substr(0,length)+'...';
+        }
+        return test;
+    }
+
+    getCleanStr = function (str) {
+        var obj = eval('(' + str + ')');
+        var formattedStr = JSON.stringify(obj, null, 2);
+        return formattedStr;
+    };
+
+</script>

+ 15 - 26
src/main/resources/templates/jobDetail.html

@@ -152,10 +152,10 @@
                 <div class="box box-primary" >
                     <div class="box-header with-border">
                         <h3 class="box-title">基本信息</h3>
-                        <button onclick="deletePaper()" class="btn btn-danger pull-right" >
+                        <button onclick="deleteJob()" class="btn btn-danger pull-right" >
                             删除
                         </button>
-                        <button onclick="changePaper()" class="btn btn-success pull-right" >
+                        <button onclick="changeJob()" class="btn btn-success pull-right" >
                             修改
                         </button>
 <!--                        <button  onclick="addJobByThis()" class="btn btn-info pull-right">-->
@@ -395,7 +395,7 @@
 <!-- AdminLTE for demo purposes -->
 <script src="/static/AdminLTE/dist/js/demo.js"></script>
 <!-- change Paper js -->
-<script src="/static/js/changePaper.js"></script>
+<!--<script src="/static/js/changePaper.js"></script>-->
 <script src="/static/AdminLTE/bower_components/bootstrap-notify/dist/bootstrap-notify.min.js"></script>
 <!--阿里 oss 上传-->
 <script src="http://gosspublic.alicdn.com/aliyun-oss-sdk-4.4.4.min.js"></script>
@@ -405,17 +405,12 @@
 
     /*<![CDATA[*/
     var urlParams = new URLSearchParams(window.location.search);
-    var paperId = urlParams.get('id');
-    var id = [[${data.get('paperId')}]];
+    var id = [[${data.get('id')}]];
+    var reportHost = [[${reportHost}]]
     // ruleId = [[${ruleLength}]]
 
 
-    var client = new OSS.Wrapper({
-        region : 'oss-cn-shanghai',
-        accessKeyId : 'IvS323TIcWUT57MG',
-        accessKeySecret : 'dYml7rvT8stQkoSjMYlfRTxNj9dEsI',
-        bucket : 'mooctest-site'
-    });
+
 
 
     $(document).ready(function(){
@@ -498,26 +493,20 @@
 
     });
 
-    showYulan = function (  ) {
-        window.open('http://47.99.140.117:9090/report/review/paper/'+ id);
+    //修改  Job的信息
+    changeJob = function ( ) {
+        window.location.href = '/review/changeJob?id='+id;
     }
 
-    changePaper = function ( ) {
-        window.location.href =  '/changePaper?id='+id;
-    }
-    delPaper = function (  ) {
+
+    delJob = function () {
         $.ajax({
-            url: '/dpaper?id='+id,
-            // data:{
-            //     'id':id
-            // },
-            type: 'DELETE',
+            url: 'http://'+reportHost+'/Bug/api/job/delJob?jobId='+id,
+            type: 'POST',
             success: function (result) {
                 console.log(result);
-                // var obj = eval('(' + result + ')');
-                // element.parentNode.parentNode.remove();
-                // success
-                window.location.href = "/papers"
+                console.log(result['status'])
+                element.parentNode.parentNode.remove();
             }
         });
     }

+ 2 - 3
src/main/resources/templates/jobList.html

@@ -127,7 +127,7 @@
                         </td>
                         <!--                        <td><span  class="label label-info" th:text="${task.caseId}">题号</span></td>-->
 
-                        <td><span  class=" " th:text="${task.get('create_time')}" ></span></td>
+                        <td><span  class=" " th:if="${task.get('create_time')!=null}" th:text="${#dates.format(task.get('create_time'),'yyyy-MM-dd HH:mm:ss')} " ></span></td>
                         <td>
 <!--                            <button th:onclick="'showYulan( \''+${task.get('id')}+'\' )'" class="btn btn-default">预览</button>-->
                             <a type="button" class="btn btn-default" th:href="'/changeJob?id='+${task.get('id')}">修改</a>
@@ -156,7 +156,6 @@
 <script type="text/javascript">
     $(document).ready(function(){
         $('[data-toggle="tooltip"]').tooltip();
-
         var taskListTable = $('#task-list').DataTable({
             searching: true,
             pageLength: 25
@@ -166,7 +165,7 @@
 
     delJob = function ( element , id ) {
         $.ajax({
-            url: 'http://47.99.140.117:9090/Bug/api/job/delJob?jobId='+id,
+            url: 'http://'+reportHost+'/Bug/api/job/delJob?jobId='+id,
             // data:{
             //     'id':id
             // },

+ 3 - 3
src/main/resources/templates/task_list.html

@@ -51,16 +51,16 @@
 <!--                {% endfor %}-->
 
                 <li>
-                    <a href="/addTask">
+                    <a href="/papers">
                         <i class="glyphicon glyphicon-pencil"></i>
                         <span>
-                            新建任务
+                            众审试卷列表
                         </span>
                     </a>
                 </li>
 
                 <li>
-                    <a href="/auditTasks">
+                    <a href="/review/jobs">
                         <i class="glyphicon glyphicon-tasks"></i>
                         <span>
                             众审任务列表