123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- package edu.nju.service;
- import edu.nju.dao.*;
- import edu.nju.entities.*;
- import edu.nju.model.JobJsonDTO;
- import edu.nju.model.MessageVO;
- import edu.nju.model.ReviewPaperVO;
- import edu.nju.util.HTTP;
- import org.json.JSONArray;
- import org.json.JSONObject;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Service;
- import org.springframework.web.bind.annotation.RequestBody;
- import org.springframework.web.bind.annotation.RequestParam;
- import java.io.IOException;
- import java.util.ArrayList;
- import java.util.List;
- import static edu.nju.util.HTTP.readStringFromUrl;
- @Service
- public class ReviewJobService {
- @Autowired
- ReviewJobDao jobDao;
- @Autowired
- ReviewGroupDao groupDao;
- @Autowired
- ReviewReportDao reportDao;
- @Autowired
- ReviewWorkerDao reviewWorkerDao;
- @Autowired
- ReviewPaperService reviewPaperService;
- @Autowired
- CrowdSourceToReviewPaperDao crowdSourceToReviewPaperDao;
- public ReviewJob getJob(String job_id){
- return jobDao.findJob(job_id);
- }
- public List<ReviewJob> getJobs(){
- return jobDao.findJobs();
- }
- public JSONObject uploadJob(String jobId,String examId,String caseId,String name, String description, String paperId, String startTime, String endTime,int singleTime,int totalWorkload, List<String>workerList, String workerDistribution,String groupId,int maxWorker){
- JSONObject jsonObject=new JSONObject();
- // String checkResult=checkJobDistribution(workerDistribution);
- // if(!checkResult.equals("success")){
- // jsonObject.put("status","fail");
- // jsonObject.put("message",checkResult);
- // return jsonObject;
- // }
- //新建,否则是update
- if(jobId.equals("")) {
- ReviewJob newReviewJob = new ReviewJob(examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, singleTime,totalWorkload,groupId, maxWorker);
- jobId = jobDao.save(newReviewJob);
- }
- else{
- ReviewJob newReviewJob = new ReviewJob(jobId,examId, caseId, name, description, Long.toString(System.currentTimeMillis()), paperId, startTime, endTime, singleTime,totalWorkload,groupId, maxWorker);
- jobId = jobDao.save(newReviewJob);
- }
- List<String>workerIds=new ArrayList<>();
- for(int i=0;i<workerList.size();i++){
- String workerIndex=workerList.get(i);
- String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
- workerIds.add(workerId);
- }
- //是教育版则调用分配服务
- // if(examId!=null&!examId.equals("")){
- try {
- invokeJobDistributionService(name, paperId, jobId, singleTime, totalWorkload);
- } catch (Exception e) {
- jsonObject.put("status","fail");
- jsonObject.put("jobId","分配服务调用失败");
- return jsonObject;
- }
- // }
- // //默认分配
- // if(workerDistribution.equals("")||workerDistribution.equals("[]")){
- // List<String>workerIds=new ArrayList<>();
- // for(int i=0;i<workerList.size();i++){
- // String workerIndex=workerList.get(i);
- // String workerId=reviewWorkerDao.save(new ReviewWorker(workerIndex,paperId,examId,jobId));
- // workerIds.add(workerId);
- // }
- // List<ReviewReport>reviewReports=reportDao.getReportsByPaperId(paperId);
- // List<String>reportIds=new ArrayList<>();
- // List<String>paperOriginalIds=new ArrayList<>();
- // List<String>originalIds=new ArrayList<>();
- // for(int i=0;i<reviewReports.size();i++) {
- // ReviewReport reviewReport=reviewReports.get(i);
- // reportIds.add(reviewReport.getId());
- // originalIds.add(reviewReport.getOriginal_id());
- // paperOriginalIds.add(paperId+"-"+reviewReport.getOriginal_id());
- // }
- // groupDao.save(new ReviewGroup("default","",workerIds,jobId,reportIds,paperOriginalIds,originalIds));
- // System.out.println("job存储成功");
- // }
- // else {
- // saveJobDistribution(workerDistribution, jobId);
- // }
- jsonObject.put("status","success");
- jsonObject.put("jobId",jobId);
- return jsonObject;
- }
- private void invokeJobDistributionService(String name,String paperId,String jobId,int singleTime,int totalWorkload) throws Exception{
- String url = "http://129.211.26.227:8082/reportsDistribution/"+ jobId;
- ReviewPaper reviewPaper=reviewPaperService.getPaper(paperId);
- String type=reviewPaper.getType();
- ReviewPaperJson reviewPaperJson=reviewPaperService.getReviewPaperJson(paperId);
- String json=reviewPaperJson.getJson();
- JSONObject jsonObject=new JSONObject(json);
- JSONArray reports= (JSONArray) jsonObject.get("report_list");
- JSONObject result=new JSONObject();
- result.put("taskName",name);
- result.put("type",type);
- result.put("singleTime",singleTime);
- result.put("totalWorkload",totalWorkload);
- result.put("reports",reports);
- String jobJson=result.toString();
- HTTP.postBody(url,jobJson);
- }
- // private String checkJobDistribution(String workerDistribution){
- // try {
- // if(workerDistribution.equals("")||workerDistribution.equals("[]")){
- // return "success";
- // }
- // JSONArray jsonArray=new JSONArray(workerDistribution);
- // for(int i=0;i<jsonArray.length();i++){
- // JSONObject jsonObject=jsonArray.getJSONObject(i);
- // String name=jsonObject.getString("name");
- // String desciption=jsonObject.getString("description");
- // JSONArray jsonArray1=jsonObject.getJSONArray("worker");
- // JSONArray jsonArray2=jsonObject.getJSONArray("report");
- // }
- // }catch (Exception e){
- // return "分配信息不正确:"+e.getMessage();
- // }
- // return "success";
- // }
- // private void saveJobDistribution(String workerDistribution,String jobId){
- // String paperId=jobDao.findJob(jobId).getPaper_id();
- // JSONArray jsonArray=new JSONArray(workerDistribution);
- // for(int i=0;i<jsonArray.length();i++){
- // JSONObject jsonObject=jsonArray.getJSONObject(i);
- // String name=jsonObject.getString("name");
- // String desciption=jsonObject.getString("description");
- // JSONArray jsonArray1=jsonObject.getJSONArray("worker");
- // List<String>workerIds=new ArrayList<>();
- // for(int j=0;j<jsonArray1.length();j++){
- // workerIds.add(String.valueOf(jsonArray1.get(j)));
- // }
- // JSONArray jsonArray2=jsonObject.getJSONArray("report");
- // List<String>reportIds=new ArrayList<>();
- // List<String>paperOriginalIds=new ArrayList<>();
- // List<String>originalIds=new ArrayList<>();
- // for(int j=0;j<jsonArray2.length();j++){
- // String originalId=String.valueOf(jsonArray2.get(j));
- // String paperOriginalId=paperId+"-"+originalId;
- // String reportId=reportDao.findReportByPaperOriginalId(paperId,originalId).getId();
- // paperOriginalIds.add(paperOriginalId);
- // reportIds.add(reportId);
- // originalIds.add(originalId);
- // }
- // groupDao.save(new ReviewGroup(name,desciption,workerIds,jobId,reportIds,paperOriginalIds,originalIds));
- // }
- // }
- public MessageVO uploadJobByJson(JobJsonDTO jobJsonDTO){
- MessageVO messageVO=new MessageVO();
- String jobName=jobJsonDTO.getJob_name();
- String jobDescription=jobJsonDTO.getJob_description();
- String startTime=jobJsonDTO.getStart_time();
- String endTime=jobJsonDTO.getEnd_time();
- String examId=jobJsonDTO.getExamId();
- String caseId=jobJsonDTO.getCaseId();
- JSONArray workerList_Array=new JSONArray(jobJsonDTO.getWorker_list());
- String paperUrl=jobJsonDTO.getPaperUrl();
- List<String>workerList=new ArrayList<>();
- for(int i=0;i<workerList_Array.length();i++){
- workerList.add(String.valueOf(workerList_Array.get(i)));
- }
- ReviewJob reviewJob=jobDao.findJobByExamCase(examId,caseId);
- if(reviewJob!=null){
- String id=reviewJob.getId();
- messageVO.setStatus("200");
- messageVO.setMessage(id);
- }
- else {
- try {
- String paperJson = readStringFromUrl(paperUrl);
- JSONObject paperResult = reviewPaperService.uploadPaper(paperJson);
- System.out.println("paperJson拉成功");
- if (!paperResult.getString("status").equals("success")) {
- messageVO.setStatus("500");
- messageVO.setMessage("创建paper失败");
- return messageVO;
- }
- String paperId = paperResult.getString("paperId");
- //是众测考试的话存对应的众测考试id
- if (examId != null && (!examId.equals(""))) {
- crowdSourceToReviewPaperDao.save(new CrowdSourceToReviewPaper(paperId, examId + "-" + caseId, paperUrl));
- }
- List<ReviewReport> reports = reviewPaperService.getReportsByPaperId(paperId);
- List<String> reportIds = new ArrayList<>();
- for (int i = 0; i < reports.size(); i++) {
- reportIds.add(reports.get(i).getId());
- }
- JSONObject jsonObject = uploadJob("", examId, caseId, jobName, jobDescription, paperId, startTime, endTime, 0, 0, workerList, "", "", 0);
- // groupDao.save(new ReviewGroup("default","",workerList,jobId,reportIds));
- if (jsonObject.getString("status").equals("success")) {
- messageVO.setStatus("200");
- messageVO.setMessage(jsonObject.getString("jobId"));
- } else {
- messageVO.setStatus("500");
- messageVO.setMessage(jsonObject.getString("message"));
- }
- } catch (IOException e) {
- messageVO.setStatus("500");
- messageVO.setMessage(e.getMessage());
- }
- }
- return messageVO;
- }
- public JSONObject updateJob(String jobId,String name, String description, String paperId,String startTime, String endTime,int singleTime, int totalWorkload,List<String>workerList,String workerDistribution,String groupId,int maxWorker){
- ReviewJob reviewJob=jobDao.findJob(jobId);
- reviewJob.setName(name);
- reviewJob.setDescription(description);
- reviewJob.setStart_time(startTime);
- reviewJob.setEnd_time(endTime);
- reviewJob.setMax_worker(maxWorker);
- jobDao.save(reviewJob);
- groupDao.removeByJob(jobId);
- reviewWorkerDao.removeByJob(jobId);
- JSONObject jsonObject1=uploadJob(jobId,"","",name,description,paperId,startTime,endTime,singleTime,totalWorkload,workerList,workerDistribution,groupId,maxWorker);
- return jsonObject1;
- }
- public boolean deleteJob(String jobId){
- try {
- jobDao.remove(jobId);
- groupDao.removeByJob(jobId);
- reviewWorkerDao.removeByJob(jobId);
- return true;
- } catch (Exception e) {
- e.printStackTrace();
- return false;
- }
- }
- // public JSONArray getJobDistribution(String jobId){
- // List<ReviewGroup>reviewGroups=groupDao.getGroupsByJob(jobId);
- // JSONArray jsonArray=new JSONArray();
- // for(int i=0;i<reviewGroups.size();i++){
- // ReviewGroup reviewGroup=reviewGroups.get(i);
- // JSONObject jsonObject=new JSONObject();
- // jsonObject.put("name",reviewGroup.getName());
- // jsonObject.put("description",reviewGroup.getDescription());
- // jsonObject.put("worker",reviewGroup.getWorkers_id());
- // jsonObject.put("report",reviewGroup.getOriginal_id());
- // jsonArray.put(jsonObject);
- // }
- // return jsonArray;
- //
- // }
- public List<ReviewJob>getJobsByPaper(String paperId){
- return jobDao.findJobsByPaper(paperId);
- }
- public ReviewJob findJobByExamCase(String examId,String caseId){
- return jobDao.findJobByExamCase(examId, caseId);
- }
- }
|