package edu.nju.service; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStreamWriter; import java.io.Writer; import java.text.SimpleDateFormat; import java.util.*; import edu.nju.dao.*; import edu.nju.entities.*; import edu.nju.model.*; import edu.nju.util.*; import org.apache.commons.lang3.EnumUtils; import org.json.JSONArray; import org.json.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.ResponseBody; @Service public class ExtraService { @Autowired ReportDao reportDao; @Autowired ExamDao examDao; @Autowired TestCaseDao testDao; @Autowired BugDao bugDao; @Autowired TaskDao taskDao; @Autowired BugMirrorDao mirrorDao; @Autowired ReviewPaperService reviewPaperService; @Autowired CrowdSourceToReviewPaperDao crowdSourceToReviewPaperDao; @Value("${sanjiPageUrl}") private String pageUrl; @Value("${main.site}") private String mainSiteUrl; //测试用例相关 public String saveTestCase(String report_id, String name, String front, String behind, String description) { TestCase testCase = new TestCase(name, front, behind, description, report_id, Long.toString(System.currentTimeMillis())); return testDao.save(testCase); } // public String saveTestCase(String report_id, String name, String front, String behind, String description,String if_execute,String if_bug) { // TestCase testCase = new TestCase(name, front, behind, description, report_id, Long.toString(System.currentTimeMillis()),if_execute,if_bug); // return testDao.save(testCase); // } public boolean updateTestCase(String id, String report_id, String name, String front, String behind, String description) { try { testDao.updateTestCase(id, report_id, name, front, behind, description); return true; } catch (Exception e) { return false; } } public List getCaseList(String report_id) { return testDao.findByReport(report_id); } public TestCase getTestCase(String id) { return testDao.findById(id); } //测试报告相关 public synchronized String saveReport(String case_id, String task_id, String case_take_id, String woker_id, String name, String device_model, String device_brand, String device_os, String script_location, String report_location, String log_location) { Report report=reportDao.findByWoker(case_take_id,woker_id); if(report==null) { Report report2 = new Report(case_id, task_id, case_take_id, woker_id, name, Long.toString(System.currentTimeMillis()), device_model, device_brand, device_os, script_location, report_location, log_location); return reportDao.save(report2); } else{ return report.getId(); } } public boolean updateReport(String report_id, String case_id, String task_id, String case_take_id, String woker_id, String name, String device_model, String device_brand, String device_os, String script_location, String report_location, String log_location) { Report report = new Report(case_id, task_id, case_take_id, woker_id, name, Long.toString(System.currentTimeMillis()), device_model, device_brand, device_os, script_location, report_location, log_location); return reportDao.update(report_id, report); } public Report getReport(String report_id) { return reportDao.findById(report_id); } public Report findByWorker(String case_take_id, String worker_id) { return reportDao.findByWoker(case_take_id, worker_id); } public List getBugList(String report_id, String case_take_id) { return bugDao.findByReport(report_id, case_take_id); } //测试题目相关 public String saveExam(String case_id, String path, String app_name, String paper_type, String test_type, String description, String collaborative_type) { String json = ExcelToJson.ExcelTranse(path).toString(); Exam exam = new Exam(case_id, json, app_name, paper_type, test_type, description, collaborative_type); examDao.save(exam); return json; } // public String saveExam1(String case_id, String path, String app_name, String paper_type, String test_type, String description, // String if_test_case,String if_bug) { // String json = ExcelToJson.ExcelTranse(path).toString(); //// Exam exam = new Exam(case_id, json, app_name, paper_type, test_type, description); // Exam exam = new Exam(case_id, json, app_name, paper_type, test_type, description,if_test_case,if_bug); // examDao.save(exam); // return json; // } public JSONArray getExamList() { List result = examDao.findAll(); JSONArray array = new JSONArray(); // Set ids = bugDao.findAllids(); Map exams = new HashMap<>(); for(Exam exam: result) { JSONObject object = new JSONObject(); exams.put(exam.getId(), exam); object.put("name", exam.getName()); object.put("description", exam.getDescription()); object.put("testType", exam.getTest_type()); object.put("case_id", exam.getId()); object.put("task_id", exam.getId()); //这里是私有云特有的,一次case对应一次task array.put(object); } // for(Exam exam: result) { exams.put(exam.getId(), exam); } // for(String id: ids) { // if(id == null || id.length() <= 0) { continue; } // String[] strs = id.split("-"); // String case_id = strs[0]; // String task_id = strs[1]; // if(exams.containsKey(case_id)) { // JSONObject object = new JSONObject(); // Exam exam = exams.get(case_id); // object.put("name", exam.getName()); // object.put("description", exam.getDescription()); // object.put("testType", exam.getTest_type()); // object.put("case_id", case_id); // object.put("task_id", task_id); // array.put(object); // } // } return array; } public Exam getExam(String id) { return examDao.findById(id); } public Task saveTask(String id){ Task task=taskDao.findById(id); if(task!=null) { long oldTime=task.getEnd_time(); //考试时间已过 if(oldTime>System.currentTimeMillis()){ return getAndSaveTaskInfo(id); }else { return task; } }else{ return getAndSaveTaskInfo(id); } } private Task getAndSaveTaskInfo(String id){ String result = HTTP.sendGet(mainSiteUrl + "/api/exam/" + id + "/info", ""); System.out.println("result " + result); if (!result.equals("")) { JSONObject json = new JSONObject(result); long beginTime = json.getLong("beginTime"); long endTime = json.getLong("endTime"); String name=json.getString("name"); double totalMins = (endTime - beginTime) / 1000 / 60.0; Task newTask = new Task(id, name,beginTime, endTime, totalMins, totalMins); taskDao.save(newTask); return newTask; }else{ return null; } } public boolean updateTask(String id,double writeMins){ try { Task task =taskDao.findById(id); task.setWrite_time(writeMins); taskDao.save(task); return true; }catch (Exception e){ return false; } } public String reportsToReviewPaper(String case_take_id){ int[]options={0,1,2,3,4,5,6,7,8,9,10}; String url="http://mooctest-site.oss-cn-shanghai.aliyuncs.com/paperjson/"+case_take_id+".json"; try { boolean isExist=OssAliyun.existFile("paperjson/"+case_take_id+".json"); if(isExist){ return url; } JSONObject result=new JSONObject(); Listbugs=bugDao.findByCaseid(case_take_id); JSONArray reportArray=new JSONArray(); int[]indexArray=new int[bugs.size()]; for(int i=0;i