Browse Source

Merge branch 'DEV' into Node

# Conflicts:
#	mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/WeightGeneralService.java
#	mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/fromKibug/impl/ScoreRuleServiceImpl.java
#	mooctest-site-server/src/main/java/cn/iselab/mooctest/site/service/impl/WeightGeneralServiceImpl.java
梅杰 7 years ago
parent
commit
f09f0c6cfc
100 changed files with 1045 additions and 3792 deletions
  1. 0 968
      mooctest-site-common/src/main/java/cn/iselab/mooctest/site/thrift/MooctestSiteThrift.java
  2. 0 12
      mooctest-site-common/src/main/thrift/MooctestSite.thrift
  3. 0 3
      mooctest-site-common/src/main/thrift/RpcBase.thrift
  4. 6 1
      mooctest-site-server/pom.xml
  5. 0 19
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/Application.java
  6. 4 9
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/AsyncTaskCallBack.java
  7. 11 53
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/AsyncTaskMap.java
  8. 145 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/McNodeCallBack.java
  9. 141 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/MutationCallBack.java
  10. 51 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/PythonNodeCallBack.java
  11. 0 17
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AccountConstants.java
  12. 0 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AnswerWayConstants.java
  13. 0 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AppConstants.java
  14. 15 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/CookieConsts.java
  15. 14 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/DevLanguageConstants.java
  16. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/DownloadConstants.java
  17. 18 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/MutationResultType.java
  18. 0 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/PageConstants.java
  19. 0 12
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/PrivilegeConstants.java
  20. 0 12
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ProjectConstants.java
  21. 0 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/UrlConstants.java
  22. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/AsyncJobTool.java
  23. 0 9
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CryptKeys.java
  24. 9 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ScoreRuleKey.java
  25. 0 9
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/SessionKey.java
  26. 0 28
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/TaskStatus.java
  27. 0 29
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/UserType.java
  28. 18 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/AddTask2CompetitionEvent.java
  29. 0 23
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/AppCreateEvent.java
  30. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EnterCompetitionEvent.java
  31. 77 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java
  32. 0 25
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/ReportCreateEvent.java
  33. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/ScoreRuleChangeEvent.java
  34. 0 60
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/StatisEventsListener.java
  35. 1 4
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/UpdateContestMentorEvent.java
  36. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/listener/ScoreRuleListener.java
  37. 29 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/initialize/InitExamSchedulerMap.java
  38. 4 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/mqListener/AsyncToolMessageReceiver.java
  39. 0 1063
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/template/MailTemplates.java
  40. 0 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ApplicationStartup.java
  41. 0 91
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/AuthFilterConfiguration.java
  42. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java
  43. 27 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/FileUploadConfiguration.java
  44. 5 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/OSSConfiguration.java
  45. 1 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RequestLoggerAutoConfiguration.java
  46. 0 41
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RpcServerConfiguration.java
  47. 7 7
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/realm/ShiroRealm.java
  48. 29 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AddOns2QualificationDao.java
  49. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AdminDao.java
  50. 0 21
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AppDao.java
  51. 3 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AssignedTaskDao.java
  52. 25 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Case2BugDao.java
  53. 0 58
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseDao.java
  54. 4 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseExtendsDao.java
  55. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2TaskDao.java
  56. 16 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CompetitionDao.java
  57. 0 95
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ContestDao.java
  58. 0 38
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ContestMentorDao.java
  59. 33 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamDao.java
  60. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Group2WorkerDao.java
  61. 0 37
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java
  62. 0 39
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerDao.java
  63. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerSubsiteFeatureDao.java
  64. 51 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/MonitorDao.java
  65. 6 6
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Paper2CaseDao.java
  66. 2 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java
  67. 18 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/QualificationDao.java
  68. 6 6
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteDao.java
  69. 0 15
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteFeatureDao.java
  70. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Target2UserDao.java
  71. 8 7
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDao.java
  72. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDevDao.java
  73. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetExtendsDao.java
  74. 0 15
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetWebDao.java
  75. 0 58
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TaskDao.java
  76. 4 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/WeightGeneralDao.java
  77. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Worker2ContestDao.java
  78. 0 61
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/WorkerDao.java
  79. 0 10
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/custom/GenericUserDao.java
  80. 0 82
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/custom/UserDao.java
  81. 0 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/AppStatisDao.java
  82. 0 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ApplicationDao.java
  83. 0 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/BugDao.java
  84. 0 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/MobileClientDao.java
  85. 0 19
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/AppPermissionDao.java
  86. 19 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/TargetPermissionDao.java
  87. 0 56
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/AuthResult.java
  88. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/GeneralGradeDTO.java
  89. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/NodeExtends.java
  90. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/PageData.java
  91. 10 10
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/config/OSSClientConfig.java
  92. 31 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/AddOns2Qualification.java
  93. 0 67
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Admin.java
  94. 0 196
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Case.java
  95. 63 10
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/CaseExtends.java
  96. 34 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Competition.java
  97. 31 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Competition2Task.java
  98. 0 80
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Contest.java
  99. 0 35
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ContestMentor.java
  100. 0 44
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/DevTarget.java

+ 0 - 968
mooctest-site-common/src/main/java/cn/iselab/mooctest/site/thrift/MooctestSiteThrift.java

@@ -1,968 +0,0 @@
-/**
- * Autogenerated by Thrift Compiler (0.9.2)
- *
- * DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
- *  @generated
- */
-package cn.iselab.mooctest.site.thrift;
-
-import org.apache.thrift.scheme.IScheme;
-import org.apache.thrift.scheme.SchemeFactory;
-import org.apache.thrift.scheme.StandardScheme;
-
-import org.apache.thrift.scheme.TupleScheme;
-import org.apache.thrift.protocol.TTupleProtocol;
-import org.apache.thrift.protocol.TProtocolException;
-import org.apache.thrift.EncodingUtils;
-import org.apache.thrift.TException;
-import org.apache.thrift.async.AsyncMethodCallback;
-import org.apache.thrift.server.AbstractNonblockingServer.*;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
-import java.util.EnumMap;
-import java.util.Set;
-import java.util.HashSet;
-import java.util.EnumSet;
-import java.util.Collections;
-import java.util.BitSet;
-import java.nio.ByteBuffer;
-import java.util.Arrays;
-import javax.annotation.Generated;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-@SuppressWarnings({"cast", "rawtypes", "serial", "unchecked"})
-@Generated(value = "Autogenerated by Thrift Compiler (0.9.2)", date = "2016-12-17")
-public class MooctestSiteThrift {
-
-  public interface Iface {
-
-    public String sayHi(String name) throws org.apache.thrift.TException;
-
-  }
-
-  public interface AsyncIface {
-
-    public void sayHi(String name, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException;
-
-  }
-
-  public static class Client extends org.apache.thrift.TServiceClient implements Iface {
-    public static class Factory implements org.apache.thrift.TServiceClientFactory<Client> {
-      public Factory() {}
-      public Client getClient(org.apache.thrift.protocol.TProtocol prot) {
-        return new Client(prot);
-      }
-      public Client getClient(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
-        return new Client(iprot, oprot);
-      }
-    }
-
-    public Client(org.apache.thrift.protocol.TProtocol prot)
-    {
-      super(prot, prot);
-    }
-
-    public Client(org.apache.thrift.protocol.TProtocol iprot, org.apache.thrift.protocol.TProtocol oprot) {
-      super(iprot, oprot);
-    }
-
-    public String sayHi(String name) throws org.apache.thrift.TException
-    {
-      send_sayHi(name);
-      return recv_sayHi();
-    }
-
-    public void send_sayHi(String name) throws org.apache.thrift.TException
-    {
-      sayHi_args args = new sayHi_args();
-      args.setName(name);
-      sendBase("sayHi", args);
-    }
-
-    public String recv_sayHi() throws org.apache.thrift.TException
-    {
-      sayHi_result result = new sayHi_result();
-      receiveBase(result, "sayHi");
-      if (result.isSetSuccess()) {
-        return result.success;
-      }
-      throw new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.MISSING_RESULT, "sayHi failed: unknown result");
-    }
-
-  }
-  public static class AsyncClient extends org.apache.thrift.async.TAsyncClient implements AsyncIface {
-    public static class Factory implements org.apache.thrift.async.TAsyncClientFactory<AsyncClient> {
-      private org.apache.thrift.async.TAsyncClientManager clientManager;
-      private org.apache.thrift.protocol.TProtocolFactory protocolFactory;
-      public Factory(org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.protocol.TProtocolFactory protocolFactory) {
-        this.clientManager = clientManager;
-        this.protocolFactory = protocolFactory;
-      }
-      public AsyncClient getAsyncClient(org.apache.thrift.transport.TNonblockingTransport transport) {
-        return new AsyncClient(protocolFactory, clientManager, transport);
-      }
-    }
-
-    public AsyncClient(org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.async.TAsyncClientManager clientManager, org.apache.thrift.transport.TNonblockingTransport transport) {
-      super(protocolFactory, clientManager, transport);
-    }
-
-    public void sayHi(String name, org.apache.thrift.async.AsyncMethodCallback resultHandler) throws org.apache.thrift.TException {
-      checkReady();
-      sayHi_call method_call = new sayHi_call(name, resultHandler, this, ___protocolFactory, ___transport);
-      this.___currentMethod = method_call;
-      ___manager.call(method_call);
-    }
-
-    public static class sayHi_call extends org.apache.thrift.async.TAsyncMethodCall {
-      private String name;
-      public sayHi_call(String name, org.apache.thrift.async.AsyncMethodCallback resultHandler, org.apache.thrift.async.TAsyncClient client, org.apache.thrift.protocol.TProtocolFactory protocolFactory, org.apache.thrift.transport.TNonblockingTransport transport) throws org.apache.thrift.TException {
-        super(client, protocolFactory, transport, resultHandler, false);
-        this.name = name;
-      }
-
-      public void write_args(org.apache.thrift.protocol.TProtocol prot) throws org.apache.thrift.TException {
-        prot.writeMessageBegin(new org.apache.thrift.protocol.TMessage("sayHi", org.apache.thrift.protocol.TMessageType.CALL, 0));
-        sayHi_args args = new sayHi_args();
-        args.setName(name);
-        args.write(prot);
-        prot.writeMessageEnd();
-      }
-
-      public String getResult() throws org.apache.thrift.TException {
-        if (getState() != org.apache.thrift.async.TAsyncMethodCall.State.RESPONSE_READ) {
-          throw new IllegalStateException("Method call not finished!");
-        }
-        org.apache.thrift.transport.TMemoryInputTransport memoryTransport = new org.apache.thrift.transport.TMemoryInputTransport(getFrameBuffer().array());
-        org.apache.thrift.protocol.TProtocol prot = client.getProtocolFactory().getProtocol(memoryTransport);
-        return (new Client(prot)).recv_sayHi();
-      }
-    }
-
-  }
-
-  public static class Processor<I extends Iface> extends org.apache.thrift.TBaseProcessor<I> implements org.apache.thrift.TProcessor {
-    private static final Logger LOGGER = LoggerFactory.getLogger(Processor.class.getName());
-    public Processor(I iface) {
-      super(iface, getProcessMap(new HashMap<String, org.apache.thrift.ProcessFunction<I, ? extends org.apache.thrift.TBase>>()));
-    }
-
-    protected Processor(I iface, Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
-      super(iface, getProcessMap(processMap));
-    }
-
-    private static <I extends Iface> Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> getProcessMap(Map<String,  org.apache.thrift.ProcessFunction<I, ? extends  org.apache.thrift.TBase>> processMap) {
-      processMap.put("sayHi", new sayHi());
-      return processMap;
-    }
-
-    public static class sayHi<I extends Iface> extends org.apache.thrift.ProcessFunction<I, sayHi_args> {
-      public sayHi() {
-        super("sayHi");
-      }
-
-      public sayHi_args getEmptyArgsInstance() {
-        return new sayHi_args();
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public sayHi_result getResult(I iface, sayHi_args args) throws org.apache.thrift.TException {
-        sayHi_result result = new sayHi_result();
-        result.success = iface.sayHi(args.name);
-        return result;
-      }
-    }
-
-  }
-
-  public static class AsyncProcessor<I extends AsyncIface> extends org.apache.thrift.TBaseAsyncProcessor<I> {
-    private static final Logger LOGGER = LoggerFactory.getLogger(AsyncProcessor.class.getName());
-    public AsyncProcessor(I iface) {
-      super(iface, getProcessMap(new HashMap<String, org.apache.thrift.AsyncProcessFunction<I, ? extends org.apache.thrift.TBase, ?>>()));
-    }
-
-    protected AsyncProcessor(I iface, Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
-      super(iface, getProcessMap(processMap));
-    }
-
-    private static <I extends AsyncIface> Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase,?>> getProcessMap(Map<String,  org.apache.thrift.AsyncProcessFunction<I, ? extends  org.apache.thrift.TBase, ?>> processMap) {
-      processMap.put("sayHi", new sayHi());
-      return processMap;
-    }
-
-    public static class sayHi<I extends AsyncIface> extends org.apache.thrift.AsyncProcessFunction<I, sayHi_args, String> {
-      public sayHi() {
-        super("sayHi");
-      }
-
-      public sayHi_args getEmptyArgsInstance() {
-        return new sayHi_args();
-      }
-
-      public AsyncMethodCallback<String> getResultHandler(final AsyncFrameBuffer fb, final int seqid) {
-        final org.apache.thrift.AsyncProcessFunction fcall = this;
-        return new AsyncMethodCallback<String>() { 
-          public void onComplete(String o) {
-            sayHi_result result = new sayHi_result();
-            result.success = o;
-            try {
-              fcall.sendResponse(fb,result, org.apache.thrift.protocol.TMessageType.REPLY,seqid);
-              return;
-            } catch (Exception e) {
-              LOGGER.error("Exception writing to internal frame buffer", e);
-            }
-            fb.close();
-          }
-          public void onError(Exception e) {
-            byte msgType = org.apache.thrift.protocol.TMessageType.REPLY;
-            org.apache.thrift.TBase msg;
-            sayHi_result result = new sayHi_result();
-            {
-              msgType = org.apache.thrift.protocol.TMessageType.EXCEPTION;
-              msg = (org.apache.thrift.TBase)new org.apache.thrift.TApplicationException(org.apache.thrift.TApplicationException.INTERNAL_ERROR, e.getMessage());
-            }
-            try {
-              fcall.sendResponse(fb,msg,msgType,seqid);
-              return;
-            } catch (Exception ex) {
-              LOGGER.error("Exception writing to internal frame buffer", ex);
-            }
-            fb.close();
-          }
-        };
-      }
-
-      protected boolean isOneway() {
-        return false;
-      }
-
-      public void start(I iface, sayHi_args args, org.apache.thrift.async.AsyncMethodCallback<String> resultHandler) throws TException {
-        iface.sayHi(args.name,resultHandler);
-      }
-    }
-
-  }
-
-  public static class sayHi_args implements org.apache.thrift.TBase<sayHi_args, sayHi_args._Fields>, java.io.Serializable, Cloneable, Comparable<sayHi_args>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("sayHi_args");
-
-    private static final org.apache.thrift.protocol.TField NAME_FIELD_DESC = new org.apache.thrift.protocol.TField("name", org.apache.thrift.protocol.TType.STRING, (short)1);
-
-    private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
-    static {
-      schemes.put(StandardScheme.class, new sayHi_argsStandardSchemeFactory());
-      schemes.put(TupleScheme.class, new sayHi_argsTupleSchemeFactory());
-    }
-
-    private String name; // required
-
-    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
-    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      NAME((short)1, "name");
-
-      private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
-
-      static {
-        for (_Fields field : EnumSet.allOf(_Fields.class)) {
-          byName.put(field.getFieldName(), field);
-        }
-      }
-
-      /**
-       * Find the _Fields constant that matches fieldId, or null if its not found.
-       */
-      public static _Fields findByThriftId(int fieldId) {
-        switch(fieldId) {
-          case 1: // NAME
-            return NAME;
-          default:
-            return null;
-        }
-      }
-
-      /**
-       * Find the _Fields constant that matches fieldId, throwing an exception
-       * if it is not found.
-       */
-      public static _Fields findByThriftIdOrThrow(int fieldId) {
-        _Fields fields = findByThriftId(fieldId);
-        if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
-        return fields;
-      }
-
-      /**
-       * Find the _Fields constant that matches name, or null if its not found.
-       */
-      public static _Fields findByName(String name) {
-        return byName.get(name);
-      }
-
-      private final short _thriftId;
-      private final String _fieldName;
-
-      _Fields(short thriftId, String fieldName) {
-        _thriftId = thriftId;
-        _fieldName = fieldName;
-      }
-
-      public short getThriftFieldId() {
-        return _thriftId;
-      }
-
-      public String getFieldName() {
-        return _fieldName;
-      }
-    }
-
-    // isset id assignments
-    public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-    static {
-      Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.NAME, new org.apache.thrift.meta_data.FieldMetaData("name", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      metaDataMap = Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(sayHi_args.class, metaDataMap);
-    }
-
-    public sayHi_args() {
-    }
-
-    public sayHi_args(
-      String name)
-    {
-      this();
-      this.name = name;
-    }
-
-    /**
-     * Performs a deep copy on <i>other</i>.
-     */
-    public sayHi_args(sayHi_args other) {
-      if (other.isSetName()) {
-        this.name = other.name;
-      }
-    }
-
-    public sayHi_args deepCopy() {
-      return new sayHi_args(this);
-    }
-
-    @Override
-    public void clear() {
-      this.name = null;
-    }
-
-    public String getName() {
-      return this.name;
-    }
-
-    public void setName(String name) {
-      this.name = name;
-    }
-
-    public void unsetName() {
-      this.name = null;
-    }
-
-    /** Returns true if field name is set (has been assigned a value) and false otherwise */
-    public boolean isSetName() {
-      return this.name != null;
-    }
-
-    public void setNameIsSet(boolean value) {
-      if (!value) {
-        this.name = null;
-      }
-    }
-
-    public void setFieldValue(_Fields field, Object value) {
-      switch (field) {
-      case NAME:
-        if (value == null) {
-          unsetName();
-        } else {
-          setName((String)value);
-        }
-        break;
-
-      }
-    }
-
-    public Object getFieldValue(_Fields field) {
-      switch (field) {
-      case NAME:
-        return getName();
-
-      }
-      throw new IllegalStateException();
-    }
-
-    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
-    public boolean isSet(_Fields field) {
-      if (field == null) {
-        throw new IllegalArgumentException();
-      }
-
-      switch (field) {
-      case NAME:
-        return isSetName();
-      }
-      throw new IllegalStateException();
-    }
-
-    @Override
-    public boolean equals(Object that) {
-      if (that == null)
-        return false;
-      if (that instanceof sayHi_args)
-        return this.equals((sayHi_args)that);
-      return false;
-    }
-
-    public boolean equals(sayHi_args that) {
-      if (that == null)
-        return false;
-
-      boolean this_present_name = true && this.isSetName();
-      boolean that_present_name = true && that.isSetName();
-      if (this_present_name || that_present_name) {
-        if (!(this_present_name && that_present_name))
-          return false;
-        if (!this.name.equals(that.name))
-          return false;
-      }
-
-      return true;
-    }
-
-    @Override
-    public int hashCode() {
-      List<Object> list = new ArrayList<Object>();
-
-      boolean present_name = true && (isSetName());
-      list.add(present_name);
-      if (present_name)
-        list.add(name);
-
-      return list.hashCode();
-    }
-
-    @Override
-    public int compareTo(sayHi_args other) {
-      if (!getClass().equals(other.getClass())) {
-        return getClass().getName().compareTo(other.getClass().getName());
-      }
-
-      int lastComparison = 0;
-
-      lastComparison = Boolean.valueOf(isSetName()).compareTo(other.isSetName());
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-      if (isSetName()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.name, other.name);
-        if (lastComparison != 0) {
-          return lastComparison;
-        }
-      }
-      return 0;
-    }
-
-    public _Fields fieldForId(int fieldId) {
-      return _Fields.findByThriftId(fieldId);
-    }
-
-    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-      schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
-    }
-
-    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-      schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
-    }
-
-    @Override
-    public String toString() {
-      StringBuilder sb = new StringBuilder("sayHi_args(");
-      boolean first = true;
-
-      sb.append("name:");
-      if (this.name == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.name);
-      }
-      first = false;
-      sb.append(")");
-      return sb.toString();
-    }
-
-    public void validate() throws org.apache.thrift.TException {
-      // check for required fields
-      // check for sub-struct validity
-    }
-
-    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
-      try {
-        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
-      } catch (org.apache.thrift.TException te) {
-        throw new java.io.IOException(te);
-      }
-    }
-
-    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
-      try {
-        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
-      } catch (org.apache.thrift.TException te) {
-        throw new java.io.IOException(te);
-      }
-    }
-
-    private static class sayHi_argsStandardSchemeFactory implements SchemeFactory {
-      public sayHi_argsStandardScheme getScheme() {
-        return new sayHi_argsStandardScheme();
-      }
-    }
-
-    private static class sayHi_argsStandardScheme extends StandardScheme<sayHi_args> {
-
-      public void read(org.apache.thrift.protocol.TProtocol iprot, sayHi_args struct) throws org.apache.thrift.TException {
-        org.apache.thrift.protocol.TField schemeField;
-        iprot.readStructBegin();
-        while (true)
-        {
-          schemeField = iprot.readFieldBegin();
-          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
-            break;
-          }
-          switch (schemeField.id) {
-            case 1: // NAME
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.name = iprot.readString();
-                struct.setNameIsSet(true);
-              } else { 
-                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-              }
-              break;
-            default:
-              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-          }
-          iprot.readFieldEnd();
-        }
-        iprot.readStructEnd();
-        struct.validate();
-      }
-
-      public void write(org.apache.thrift.protocol.TProtocol oprot, sayHi_args struct) throws org.apache.thrift.TException {
-        struct.validate();
-
-        oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.name != null) {
-          oprot.writeFieldBegin(NAME_FIELD_DESC);
-          oprot.writeString(struct.name);
-          oprot.writeFieldEnd();
-        }
-        oprot.writeFieldStop();
-        oprot.writeStructEnd();
-      }
-
-    }
-
-    private static class sayHi_argsTupleSchemeFactory implements SchemeFactory {
-      public sayHi_argsTupleScheme getScheme() {
-        return new sayHi_argsTupleScheme();
-      }
-    }
-
-    private static class sayHi_argsTupleScheme extends TupleScheme<sayHi_args> {
-
-      @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, sayHi_args struct) throws org.apache.thrift.TException {
-        TTupleProtocol oprot = (TTupleProtocol) prot;
-        BitSet optionals = new BitSet();
-        if (struct.isSetName()) {
-          optionals.set(0);
-        }
-        oprot.writeBitSet(optionals, 1);
-        if (struct.isSetName()) {
-          oprot.writeString(struct.name);
-        }
-      }
-
-      @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, sayHi_args struct) throws org.apache.thrift.TException {
-        TTupleProtocol iprot = (TTupleProtocol) prot;
-        BitSet incoming = iprot.readBitSet(1);
-        if (incoming.get(0)) {
-          struct.name = iprot.readString();
-          struct.setNameIsSet(true);
-        }
-      }
-    }
-
-  }
-
-  public static class sayHi_result implements org.apache.thrift.TBase<sayHi_result, sayHi_result._Fields>, java.io.Serializable, Cloneable, Comparable<sayHi_result>   {
-    private static final org.apache.thrift.protocol.TStruct STRUCT_DESC = new org.apache.thrift.protocol.TStruct("sayHi_result");
-
-    private static final org.apache.thrift.protocol.TField SUCCESS_FIELD_DESC = new org.apache.thrift.protocol.TField("success", org.apache.thrift.protocol.TType.STRING, (short)0);
-
-    private static final Map<Class<? extends IScheme>, SchemeFactory> schemes = new HashMap<Class<? extends IScheme>, SchemeFactory>();
-    static {
-      schemes.put(StandardScheme.class, new sayHi_resultStandardSchemeFactory());
-      schemes.put(TupleScheme.class, new sayHi_resultTupleSchemeFactory());
-    }
-
-    private String success; // required
-
-    /** The set of fields this struct contains, along with convenience methods for finding and manipulating them. */
-    public enum _Fields implements org.apache.thrift.TFieldIdEnum {
-      SUCCESS((short)0, "success");
-
-      private static final Map<String, _Fields> byName = new HashMap<String, _Fields>();
-
-      static {
-        for (_Fields field : EnumSet.allOf(_Fields.class)) {
-          byName.put(field.getFieldName(), field);
-        }
-      }
-
-      /**
-       * Find the _Fields constant that matches fieldId, or null if its not found.
-       */
-      public static _Fields findByThriftId(int fieldId) {
-        switch(fieldId) {
-          case 0: // SUCCESS
-            return SUCCESS;
-          default:
-            return null;
-        }
-      }
-
-      /**
-       * Find the _Fields constant that matches fieldId, throwing an exception
-       * if it is not found.
-       */
-      public static _Fields findByThriftIdOrThrow(int fieldId) {
-        _Fields fields = findByThriftId(fieldId);
-        if (fields == null) throw new IllegalArgumentException("Field " + fieldId + " doesn't exist!");
-        return fields;
-      }
-
-      /**
-       * Find the _Fields constant that matches name, or null if its not found.
-       */
-      public static _Fields findByName(String name) {
-        return byName.get(name);
-      }
-
-      private final short _thriftId;
-      private final String _fieldName;
-
-      _Fields(short thriftId, String fieldName) {
-        _thriftId = thriftId;
-        _fieldName = fieldName;
-      }
-
-      public short getThriftFieldId() {
-        return _thriftId;
-      }
-
-      public String getFieldName() {
-        return _fieldName;
-      }
-    }
-
-    // isset id assignments
-    public static final Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> metaDataMap;
-    static {
-      Map<_Fields, org.apache.thrift.meta_data.FieldMetaData> tmpMap = new EnumMap<_Fields, org.apache.thrift.meta_data.FieldMetaData>(_Fields.class);
-      tmpMap.put(_Fields.SUCCESS, new org.apache.thrift.meta_data.FieldMetaData("success", org.apache.thrift.TFieldRequirementType.DEFAULT, 
-          new org.apache.thrift.meta_data.FieldValueMetaData(org.apache.thrift.protocol.TType.STRING)));
-      metaDataMap = Collections.unmodifiableMap(tmpMap);
-      org.apache.thrift.meta_data.FieldMetaData.addStructMetaDataMap(sayHi_result.class, metaDataMap);
-    }
-
-    public sayHi_result() {
-    }
-
-    public sayHi_result(
-      String success)
-    {
-      this();
-      this.success = success;
-    }
-
-    /**
-     * Performs a deep copy on <i>other</i>.
-     */
-    public sayHi_result(sayHi_result other) {
-      if (other.isSetSuccess()) {
-        this.success = other.success;
-      }
-    }
-
-    public sayHi_result deepCopy() {
-      return new sayHi_result(this);
-    }
-
-    @Override
-    public void clear() {
-      this.success = null;
-    }
-
-    public String getSuccess() {
-      return this.success;
-    }
-
-    public void setSuccess(String success) {
-      this.success = success;
-    }
-
-    public void unsetSuccess() {
-      this.success = null;
-    }
-
-    /** Returns true if field success is set (has been assigned a value) and false otherwise */
-    public boolean isSetSuccess() {
-      return this.success != null;
-    }
-
-    public void setSuccessIsSet(boolean value) {
-      if (!value) {
-        this.success = null;
-      }
-    }
-
-    public void setFieldValue(_Fields field, Object value) {
-      switch (field) {
-      case SUCCESS:
-        if (value == null) {
-          unsetSuccess();
-        } else {
-          setSuccess((String)value);
-        }
-        break;
-
-      }
-    }
-
-    public Object getFieldValue(_Fields field) {
-      switch (field) {
-      case SUCCESS:
-        return getSuccess();
-
-      }
-      throw new IllegalStateException();
-    }
-
-    /** Returns true if field corresponding to fieldID is set (has been assigned a value) and false otherwise */
-    public boolean isSet(_Fields field) {
-      if (field == null) {
-        throw new IllegalArgumentException();
-      }
-
-      switch (field) {
-      case SUCCESS:
-        return isSetSuccess();
-      }
-      throw new IllegalStateException();
-    }
-
-    @Override
-    public boolean equals(Object that) {
-      if (that == null)
-        return false;
-      if (that instanceof sayHi_result)
-        return this.equals((sayHi_result)that);
-      return false;
-    }
-
-    public boolean equals(sayHi_result that) {
-      if (that == null)
-        return false;
-
-      boolean this_present_success = true && this.isSetSuccess();
-      boolean that_present_success = true && that.isSetSuccess();
-      if (this_present_success || that_present_success) {
-        if (!(this_present_success && that_present_success))
-          return false;
-        if (!this.success.equals(that.success))
-          return false;
-      }
-
-      return true;
-    }
-
-    @Override
-    public int hashCode() {
-      List<Object> list = new ArrayList<Object>();
-
-      boolean present_success = true && (isSetSuccess());
-      list.add(present_success);
-      if (present_success)
-        list.add(success);
-
-      return list.hashCode();
-    }
-
-    @Override
-    public int compareTo(sayHi_result other) {
-      if (!getClass().equals(other.getClass())) {
-        return getClass().getName().compareTo(other.getClass().getName());
-      }
-
-      int lastComparison = 0;
-
-      lastComparison = Boolean.valueOf(isSetSuccess()).compareTo(other.isSetSuccess());
-      if (lastComparison != 0) {
-        return lastComparison;
-      }
-      if (isSetSuccess()) {
-        lastComparison = org.apache.thrift.TBaseHelper.compareTo(this.success, other.success);
-        if (lastComparison != 0) {
-          return lastComparison;
-        }
-      }
-      return 0;
-    }
-
-    public _Fields fieldForId(int fieldId) {
-      return _Fields.findByThriftId(fieldId);
-    }
-
-    public void read(org.apache.thrift.protocol.TProtocol iprot) throws org.apache.thrift.TException {
-      schemes.get(iprot.getScheme()).getScheme().read(iprot, this);
-    }
-
-    public void write(org.apache.thrift.protocol.TProtocol oprot) throws org.apache.thrift.TException {
-      schemes.get(oprot.getScheme()).getScheme().write(oprot, this);
-      }
-
-    @Override
-    public String toString() {
-      StringBuilder sb = new StringBuilder("sayHi_result(");
-      boolean first = true;
-
-      sb.append("success:");
-      if (this.success == null) {
-        sb.append("null");
-      } else {
-        sb.append(this.success);
-      }
-      first = false;
-      sb.append(")");
-      return sb.toString();
-    }
-
-    public void validate() throws org.apache.thrift.TException {
-      // check for required fields
-      // check for sub-struct validity
-    }
-
-    private void writeObject(java.io.ObjectOutputStream out) throws java.io.IOException {
-      try {
-        write(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(out)));
-      } catch (org.apache.thrift.TException te) {
-        throw new java.io.IOException(te);
-      }
-    }
-
-    private void readObject(java.io.ObjectInputStream in) throws java.io.IOException, ClassNotFoundException {
-      try {
-        read(new org.apache.thrift.protocol.TCompactProtocol(new org.apache.thrift.transport.TIOStreamTransport(in)));
-      } catch (org.apache.thrift.TException te) {
-        throw new java.io.IOException(te);
-      }
-    }
-
-    private static class sayHi_resultStandardSchemeFactory implements SchemeFactory {
-      public sayHi_resultStandardScheme getScheme() {
-        return new sayHi_resultStandardScheme();
-      }
-    }
-
-    private static class sayHi_resultStandardScheme extends StandardScheme<sayHi_result> {
-
-      public void read(org.apache.thrift.protocol.TProtocol iprot, sayHi_result struct) throws org.apache.thrift.TException {
-        org.apache.thrift.protocol.TField schemeField;
-        iprot.readStructBegin();
-        while (true)
-        {
-          schemeField = iprot.readFieldBegin();
-          if (schemeField.type == org.apache.thrift.protocol.TType.STOP) { 
-            break;
-          }
-          switch (schemeField.id) {
-            case 0: // SUCCESS
-              if (schemeField.type == org.apache.thrift.protocol.TType.STRING) {
-                struct.success = iprot.readString();
-                struct.setSuccessIsSet(true);
-              } else { 
-                org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-              }
-              break;
-            default:
-              org.apache.thrift.protocol.TProtocolUtil.skip(iprot, schemeField.type);
-          }
-          iprot.readFieldEnd();
-        }
-        iprot.readStructEnd();
-        struct.validate();
-      }
-
-      public void write(org.apache.thrift.protocol.TProtocol oprot, sayHi_result struct) throws org.apache.thrift.TException {
-        struct.validate();
-
-        oprot.writeStructBegin(STRUCT_DESC);
-        if (struct.success != null) {
-          oprot.writeFieldBegin(SUCCESS_FIELD_DESC);
-          oprot.writeString(struct.success);
-          oprot.writeFieldEnd();
-        }
-        oprot.writeFieldStop();
-        oprot.writeStructEnd();
-      }
-
-    }
-
-    private static class sayHi_resultTupleSchemeFactory implements SchemeFactory {
-      public sayHi_resultTupleScheme getScheme() {
-        return new sayHi_resultTupleScheme();
-      }
-    }
-
-    private static class sayHi_resultTupleScheme extends TupleScheme<sayHi_result> {
-
-      @Override
-      public void write(org.apache.thrift.protocol.TProtocol prot, sayHi_result struct) throws org.apache.thrift.TException {
-        TTupleProtocol oprot = (TTupleProtocol) prot;
-        BitSet optionals = new BitSet();
-        if (struct.isSetSuccess()) {
-          optionals.set(0);
-        }
-        oprot.writeBitSet(optionals, 1);
-        if (struct.isSetSuccess()) {
-          oprot.writeString(struct.success);
-        }
-      }
-
-      @Override
-      public void read(org.apache.thrift.protocol.TProtocol prot, sayHi_result struct) throws org.apache.thrift.TException {
-        TTupleProtocol iprot = (TTupleProtocol) prot;
-        BitSet incoming = iprot.readBitSet(1);
-        if (incoming.get(0)) {
-          struct.success = iprot.readString();
-          struct.setSuccessIsSet(true);
-        }
-      }
-    }
-
-  }
-
-}

+ 0 - 12
mooctest-site-common/src/main/thrift/MooctestSite.thrift

@@ -1,12 +0,0 @@
-namespace java cn.iselab.mooctest.site.thrift
-
-include "RpcBase.thrift"
-
-service MooctestSiteThrift {
-
-    string sayHi(
-        1: string name
-    )
-
-}
-

+ 0 - 3
mooctest-site-common/src/main/thrift/RpcBase.thrift

@@ -1,3 +0,0 @@
-namespace java cn.iselab.mooctest.site.thrift
-
-exception DataNotFoundException {}

+ 6 - 1
mooctest-site-server/pom.xml

@@ -17,7 +17,7 @@
         <dependency>
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.15</version>
+            <version>1.0.16</version>
         </dependency>
         </dependency>
 
 
         <dependency>
         <dependency>
@@ -131,6 +131,11 @@
         </dependency>
         </dependency>
         <dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-redis</artifactId>
+            <version>${spring.boot.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-configuration-processor</artifactId>
             <artifactId>spring-boot-configuration-processor</artifactId>
             <version>${spring.boot.version}</version>
             <version>${spring.boot.version}</version>
             <optional>true</optional>
             <optional>true</optional>

+ 0 - 19
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/Application.java

@@ -43,15 +43,11 @@ import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration;
 import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
 import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
 import org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration;
 import org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration;
 import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration;
 import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration;
-import org.springframework.boot.context.embedded.MultipartConfigFactory;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
 
-import javax.servlet.MultipartConfigElement;
-
 /**
 /**
  * @author liuzicong
  * @author liuzicong
  */
  */
@@ -109,21 +105,6 @@ public class Application {
 
 
         // To disabled web environment, change `true` to `false`
         // To disabled web environment, change `true` to `false`
         application.setWebEnvironment(true);
         application.setWebEnvironment(true);
-//        application.addListeners(new ApplicationStartup());
         application.run(args);
         application.run(args);
     }
     }
-
-    /**
-     * 文件上传配置
-     * @return
-     */
-    @Bean
-    public MultipartConfigElement multipartConfigElement() {
-        MultipartConfigFactory factory = new MultipartConfigFactory();
-        //单个文件最大
-        factory.setMaxFileSize("100MB"); //KB,MB
-        /// 设置总上传数据总大小
-        factory.setMaxRequestSize("500MB");
-        return factory.createMultipartConfig();
-    }
 }
 }

+ 4 - 9
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/AsyncTaskCallBack.java

@@ -7,18 +7,13 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 
 
+import java.io.Serializable;
 import java.util.Map;
 import java.util.Map;
 
 
 /**
 /**
  * Created by tangshanshan on 2018/3/6.
  * Created by tangshanshan on 2018/3/6.
  */
  */
-public abstract class AsyncTaskCallBack {
-    protected final Logger LOG = LoggerFactory.getLogger(getClass());
-
-    @Getter
-    @Setter
-    Map<String,String> context;
-
-    public abstract void onSuccess(String result);
-    public abstract void onError(String error);
+public interface AsyncTaskCallBack {
+    void onSuccess(Map<String,String> context,String result);
+    void onError(Map<String,String> context,String result);
 }
 }

+ 11 - 53
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/AsyncTaskMap.java

@@ -2,73 +2,31 @@ package cn.iselab.mooctest.site.common.acyncTask;
 
 
 import org.slf4j.Logger;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.InitializingBean;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.util.Iterator;
+import javax.annotation.Resource;
+import java.io.Serializable;
 import java.util.Map;
 import java.util.Map;
-import java.util.Timer;
-import java.util.TimerTask;
-import java.util.concurrent.ConcurrentHashMap;
 
 
 /**
 /**
  * Created by tangshanshan on 2018/3/7.
  * Created by tangshanshan on 2018/3/7.
  */
  */
 @Component
 @Component
-public class AsyncTaskMap implements InitializingBean{
+public class AsyncTaskMap{
 
 
-    private final long START = 0;
-    private final long EXPIRATION_TIME = 60*60*1000;
-    private final long INTERVAL = 5*60*1000;
+    private final String KEY_PREFIX = "ASYNC_JOB_CONTEXT_";
 
 
-    private ConcurrentHashMap<String, AsyncTaskCallBack> map = new ConcurrentHashMap<>();
-    private ConcurrentHashMap<String, Long> time = new ConcurrentHashMap<>();
+    @Resource(name="redisTemplate")
+    RedisTemplate<Object, Object> redisTemplate;
 
 
-    private final Logger LOG = LoggerFactory.getLogger(getClass());
-
-    public int size() {
-        return map.size();
-    }
-
-    public boolean containsKey(String key) {
-        return map.containsKey(key);
+    public Map<String,String> get(String key) {
+        return (Map<String,String>) redisTemplate.opsForValue().get(KEY_PREFIX+key);
     }
     }
 
 
-    public AsyncTaskCallBack get(String key) {
-        return map.get(key);
+    public void put(String key, Map<String,String> value) {
+        redisTemplate.opsForValue().set(KEY_PREFIX+key,value);
     }
     }
 
 
-    public AsyncTaskCallBack put(String key, AsyncTaskCallBack value) {
-        time.put(key, System.currentTimeMillis());
-        return map.put(key,value);
-    }
 
 
-    public AsyncTaskCallBack remove(Object key) {
-        time.remove(key);
-        return map.remove(key);
-    }
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        Timer timer = new Timer();
-        timer.schedule(new TimerTask(){
-            @Override
-            public void run() {
-                LOG.info("---------------------------check map expire time--------------------------"+map.size()+"  "+time.size());
-                long now = System.currentTimeMillis();
-                Iterator<Map.Entry<String, Long>> iterator = time.entrySet().iterator();
-                while (iterator.hasNext()) {
-                    Map.Entry<String,Object> entry = (Map.Entry) iterator.next();
-                    String key = entry.getKey();
-                    long value = (Long)entry.getValue();
-                    long duration = now - value;
-                    if(duration>EXPIRATION_TIME){
-                        iterator.remove();
-                        map.remove(key);
-                        LOG.info(map.size()+"  "+time.size());
-                    }
-                }
-            }
-        }, START,INTERVAL);
-    }
 }
 }

+ 145 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/McNodeCallBack.java

@@ -0,0 +1,145 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.common.constant.MutationResultType;
+import cn.iselab.mooctest.site.service.AssignedTaskService;
+import cn.iselab.mooctest.site.service.CalculateScoreService;
+import cn.iselab.mooctest.site.service.GeneralCalculateScoreService;
+import cn.iselab.mooctest.site.service.TargetGraphService;
+import cn.iselab.mooctest.site.service.common.MongoAPIService;
+import cn.iselab.mooctest.site.service.fromDev.AnalysisService;
+import cn.iselab.mooctest.site.data.GeneralGradeDTO;
+import cn.iselab.mooctest.site.web.data.forMongo.NodeCatch.CaughtNodeDTO;
+import cn.iselab.mooctest.site.web.data.forMongo.TargetGraphDTO;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+import com.google.gson.Gson;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Scope;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 上午11:43 2018/3/19
+ * @Modified By:
+ */
+@Component
+public class McNodeCallBack implements AsyncTaskCallBack{
+
+    @Autowired
+    private TargetGraphService targetGraphService;
+
+    @Autowired
+    AssignedTaskService assignedTaskService;
+
+    @Autowired
+    CalculateScoreService calculateScoreService;
+
+    @Autowired
+    CalculateSocreLogic calculateSocreLogic;
+
+    @Autowired
+    MongoAPIService mongoAPIService;
+
+    @Autowired
+    AnalysisService analysisService;
+
+    @Autowired
+    GeneralCalculateScoreService generalCalculateScoreService;
+
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+    @Override
+    public void onSuccess(Map<String,String> context, String result){
+        LOG.info("------------------- mcNode onSuccess -------------------");
+        System.out.println(result);
+        String type=context.get("type");
+        Long userId=0L;
+        Long examId=0L;
+        Long caseId=0L;
+        Long targetId=0L;
+        if(context.containsKey("userId")) {
+            userId = Long.parseLong(context.get("userId"));
+        }
+        if(context.containsKey("examId")) {
+            examId = Long.parseLong(context.get("examId"));
+        }
+        if(context.containsKey("caseId")){
+            caseId=Long.parseLong(context.get("caseId"));
+        }
+        if(context.containsKey("targetId")){
+            targetId=Long.parseLong(context.get("targetId"));
+        }
+        if(type.equals(MutationResultType.MUTAION_NODE)) {
+            processCaughtNode(result,userId,examId,caseId);
+        }else if(type.equals(MutationResultType.MUTATION_META_NODE)) {
+            processMetaNode(result,targetId);
+        }
+    }
+
+    @Override
+    public void onError(Map<String,String> context, String error){
+        LOG.info("-------------------  mcNode onError:"+error+" ------------------- ");
+    }
+
+    private void processCaughtNode(String result, long userId, long examId, long caseId) {
+        Gson gson = new Gson();
+        JSONArray arrayNode=new JSONArray(result);
+        List<CaughtNodeDTO> dtos = new ArrayList<>();
+        for (int i = 0; i < arrayNode.length(); i++) {
+            JSONObject obj = arrayNode.getJSONObject(i);
+            CaughtNodeDTO dto = gson.fromJson(obj.toString(), CaughtNodeDTO.class);
+            dtos.add(dto);
+        }
+        List<String> categories = dtos
+                .stream()
+                .map(CaughtNodeDTO::getCategory)
+                .collect(Collectors.toList());
+
+        List<GeneralGradeDTO> gradeDTOS=new ArrayList<>();
+        categories
+                .parallelStream().forEach(category-> {
+                    List<CaughtNodeDTO> dtoList = dtos
+                            .parallelStream()
+                            .filter(caughtNodeDTO -> caughtNodeDTO.getCategory().equals(category))
+                            .collect(Collectors.toList());
+                    long catchNum = dtoList.parallelStream().map(dto-> dto.getIfCatch() == true).count();
+                    double score = dtoList.size() == 0 ? 0 : (double) catchNum / dtoList.size();
+                    GeneralGradeDTO gradeDTO=new GeneralGradeDTO();
+                    gradeDTO.setCaseId(caseId);
+                    gradeDTO.setScore(score);
+                    gradeDTO.setTaskId(examId);
+                    gradeDTO.setWorkerId(userId);
+                    gradeDTO.setType(category);
+                    gradeDTOS.add(gradeDTO);
+        });
+
+        generalCalculateScoreService.updateTypeGrade(gradeDTOS);
+
+        if (gradeDTOS != null && !gradeDTOS.isEmpty()) {
+            calculateScoreService.calculatePersonalDevScore(examId, caseId, userId);
+            calculateSocreLogic.calculateExamScoreAuto(examId, userId);
+        }
+        calculateSocreLogic.catchNode(examId, caseId, userId, String.valueOf(System.currentTimeMillis()), dtos);
+
+    }
+
+    private void processMetaNode(String result, long targetId){
+        TargetGraphDTO dto=new Gson().fromJson(result,TargetGraphDTO.class);
+        dto.setTargetId(targetId);
+        dto=targetGraphService.updateTargetGraph(dto);
+        try {
+            targetGraphService.saveTargetGraphJson(dto);
+        }catch (Exception e){
+            LOG.info(targetId+"生成变异元数据json文件失败");
+        }
+    }
+}

+ 141 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/MutationCallBack.java

@@ -1,28 +1,158 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 package cn.iselab.mooctest.site.common.acyncTask;
 
 
-import cn.iselab.mooctest.site.service.UserService;
+import cn.iselab.mooctest.site.common.constant.MutationResultType;
+import cn.iselab.mooctest.site.models.Grade;
+import cn.iselab.mooctest.site.rpc.dev.data.MutationDTO;
+import cn.iselab.mooctest.site.service.*;
+import cn.iselab.mooctest.site.service.common.MongoAPIService;
+import cn.iselab.mooctest.site.service.fromDev.AnalysisService;
+import cn.iselab.mooctest.site.web.data.forMongo.MutationForMongoDTO;
+import cn.iselab.mooctest.site.web.data.forMongo.NodeCatch.CaughtNodeDTO;
+import cn.iselab.mooctest.site.web.data.forMongo.TargetGraphDTO;
+import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
+
+import com.google.gson.Gson;
+import org.json.JSONArray;
+import org.json.JSONObject;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Scope;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import java.util.Map;
+
+
 /**
 /**
  * Created by tangshanshan on 2018/3/6.
  * Created by tangshanshan on 2018/3/6.
  */
  */
 @Component
 @Component
-@Scope("prototype")
-public class MutationCallBack extends AsyncTaskCallBack {
+public class MutationCallBack implements AsyncTaskCallBack {
+
+    protected final Logger LOG = LoggerFactory.getLogger(getClass());
+
+    @Autowired
+    AssignedTaskService assignedTaskService;
+
+    @Autowired
+    CalculateScoreService calculateScoreService;
+
+    @Autowired
+    CalculateSocreLogic calculateSocreLogic;
+
+    @Autowired
+    MongoAPIService mongoAPIService;
+
+    @Autowired
+    AnalysisService analysisService;
+
     @Autowired
     @Autowired
-    UserService userService;   //我就试试能不能注入
+    TargetGraphService targetGraphService;
+
+    @Autowired
+    GeneralCalculateScoreService generalCalculateScoreService;
 
 
     @Override
     @Override
-    public void onSuccess(String result) {
-        //TODO mutation 结果处理
-        userService.findByUserId(7L);
-        LOG.info("mutation onSuccess");
+    public void onSuccess(Map<String,String> context,String result) {
+        LOG.info("------------------- mutation onSuccess -------------------");
+        System.out.println(result);
+        String type=context.get("type");
+        Long userId=0L;
+        Long examId=0L;
+        Long caseId=0L;
+        Long targetId=0L;
+        if(context.containsKey("userId")) {
+            userId = Long.parseLong(context.get("userId"));
+        }
+        if(context.containsKey("examId")) {
+            examId = Long.parseLong(context.get("examId"));
+        }
+        if(context.containsKey("caseId")){
+            caseId=Long.parseLong(context.get("caseId"));
+        }
+        if(context.containsKey("targetId")){
+            targetId=Long.parseLong(context.get("targetId"));
+        }
+        if(type.equals(MutationResultType.MUTAION_NODE_RESULT)) {
+            processForMutationAndNode(result,userId,examId,caseId);
+        }else if(type.equals(MutationResultType.MUTAION_NODE)) {
+            processCaughtNode(result,userId,examId,caseId);
+        }else if(type.equals(MutationResultType.MUTAION_RESULT)){
+            processMutationResult(result,userId,examId,caseId);
+        }else if(type.equals(MutationResultType.MUTATION_META_NODE)){
+            processMetaNode(result,targetId);
+        }
     }
     }
 
 
     @Override
     @Override
-    public void onError(String error) {
-        LOG.info("mutation onError");
+    public void onError(Map<String,String> context,String error) {
+        LOG.info("------------------- mutation onError:"+error+" -------------------");
+    }
+
+    private void processForMutationAndNode(String result, long userId, long examId, long caseId){
+        JSONObject jsonObject = new JSONObject(result);
+        JSONArray arrayNode = jsonObject.getJSONArray("nodes");
+        JSONObject objectMutation = jsonObject.getJSONObject("mutation");
+        if (arrayNode != null) {
+            processCaughtNode(arrayNode.toString(),userId,examId,caseId);
+        }
+        if (objectMutation != null) {
+            processMutationResult(objectMutation.toString(),userId,examId,caseId);
+        }
+    }
+
+    private void processMutationResult(String result, long userId, long examId, long caseId) {
+        Gson gson = new Gson();
+        MutationDTO dto=gson.fromJson(result,MutationDTO.class);
+        try {
+            List<MutationForMongoDTO> list = mongoAPIService.getMutationFromMongo(userId, examId, caseId);
+            if (list != null) {
+                MutationForMongoDTO mutationForMongoDTO = list.get(0);
+                mutationForMongoDTO.setMutationDTO(dto);
+                mongoAPIService.updateMutationToMongo(mutationForMongoDTO);
+            } else {
+                mongoAPIService.saveMutationToMongo(userId, examId, caseId, dto);
+            }
+        } catch (IOException e) {
+            LOG.info("fail to save" + userId + "'s mutation result");
+        }
+    }
+
+    private void processCaughtNode(String result, long userId, long examId, long caseId) {
+        Gson gson = new Gson();
+        JSONArray arrayNode=new JSONArray(result);
+        List<CaughtNodeDTO> dtos = new ArrayList<>();
+        for (int i = 0; i < arrayNode.length(); i++) {
+            JSONObject obj = arrayNode.getJSONObject(i);
+            CaughtNodeDTO dto = gson.fromJson(obj.toString(), CaughtNodeDTO.class);
+            dtos.add(dto);
+        }
+        long catchNum = dtos.stream().filter(caughtNodeDTO -> caughtNodeDTO.getIfCatch() == true).count();
+        double mutationScore = dtos.size() == 0 ? 0 : (double) catchNum / dtos.size();
+        generalCalculateScoreService.updateTypeGrade(userId,examId,caseId,dtos.get(0).getCategory(),mutationScore);
+        List<Grade> grades = analysisService.saveMutationScore(userId, examId, caseId, mutationScore);
+        if (grades != null && !grades.isEmpty()) {
+            calculateScoreService.calculatePersonalDevScore(examId, caseId, userId);
+            calculateSocreLogic.calculateExamScoreAuto(examId, userId);
+        }
+        calculateSocreLogic.catchNode(examId, caseId, userId, String.valueOf(System.currentTimeMillis()), dtos);
+
+    }
+
+    private void processMetaNode(String result, long targetId){
+        Gson gson=new Gson();
+        TargetGraphDTO dto=gson.fromJson(result,TargetGraphDTO.class);
+        dto.setTargetId(targetId);
+        dto=targetGraphService.updateTargetGraph(dto);
+        try {
+            targetGraphService.saveTargetGraphJson(dto);
+        }catch (Exception e){
+            e.printStackTrace();
+            LOG.info(targetId+"生成变异元数据json文件失败");
+        }
     }
     }
 }
 }

+ 51 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/PythonNodeCallBack.java

@@ -0,0 +1,51 @@
+package cn.iselab.mooctest.site.common.acyncTask;
+
+import cn.iselab.mooctest.site.service.AsyncScheduleService;
+import cn.iselab.mooctest.site.service.TargetGraphService;
+import cn.iselab.mooctest.site.util.data.JSONUtil;
+import cn.iselab.mooctest.site.web.data.forMongo.TargetGraphDTO;
+import java.util.ArrayList;
+import java.util.Map;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * python node callback
+ *
+ * @author yyy
+ * @create 2018-03-22 16:46
+ */
+@Component
+@Slf4j
+public class PythonNodeCallBack implements AsyncTaskCallBack {
+
+  @Autowired
+  TargetGraphService targetGraphService;
+
+  @Autowired
+  AsyncScheduleService asyncScheduleService;
+
+  @Override
+  public void onSuccess(Map<String, String> context, String result) {
+    System.out.println("result is: --------------"+result+"---------------");
+    if(!result.isEmpty()){
+      TargetGraphDTO targetGraphDTO = JSONUtil.json2Obj(result,TargetGraphDTO.class);
+      Long targetId = Long.parseLong(context.get("targetId"));
+      targetGraphDTO.setTargetId(targetId);
+      targetGraphService.saveTargetGraph(targetGraphDTO);
+      try {
+        targetGraphService.saveTargetGraphJson(result,targetId);
+      } catch (Exception e) {
+        e.printStackTrace();
+      }
+    }
+  }
+
+  @Override
+  public void onError(Map<String, String> context, String result) {
+      log.error("---------------------python generate node error-----------------------");
+  }
+
+
+}

+ 0 - 17
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AccountConstants.java

@@ -1,17 +0,0 @@
-package cn.iselab.mooctest.site.common.constant;
-
-public class AccountConstants {
-    public static final int WORKER_LEVEL_INCOMPLETE = -1;
-    public static final Integer MANAGER_LEVEL_INCOMPLETE = -1;
-
-    /**
-     * Verification timeout
-     */
-    public static final int VERI_TIMEOUT_SEC = Integer.parseInt(SmsConstants.SMS_VERI_TIMEOUT) * 60;
-
-    public static final long FORGET_PASSWD_TIMEOUT = 1000 * 60 * 60 * 12;
-
-    public static final int DEFAULT_TASK_NUM = 1;
-    public static final int DEFAULT_GROUP_SIZE = 50;
-    public static final int DEFAULT_GROUP_NUM = 5;
-}

+ 0 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AnswerWayConstants.java

@@ -1,16 +1,5 @@
 package cn.iselab.mooctest.site.common.constant;
 package cn.iselab.mooctest.site.common.constant;
 
 
-import cn.iselab.mooctest.site.dao.SubsiteDao;
-import cn.iselab.mooctest.site.models.Subsite;
-import cn.iselab.mooctest.site.service.common.SubsiteService;
-import cn.iselab.mooctest.site.service.common.impl.SubsiteServiceImpl;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-
 /**
 /**
  * Created by Liu on 2017/1/3.
  * Created by Liu on 2017/1/3.
  */
  */

+ 0 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AppConstants.java

@@ -1,8 +0,0 @@
-package cn.iselab.mooctest.site.common.constant;
-
-/**
- * Created by Liu on 2017/3/21.
- */
-public class AppConstants {
-    public static final int APP_VERIFIED = 1;
-}

+ 15 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/CookieConsts.java

@@ -0,0 +1,15 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @author sean
+ * @date 2017-03-18.
+ */
+public class CookieConsts {
+
+    public static final String COOKIE_DOMAIN = ".mooctest.net";
+
+    public static final int MAX_AGE_CAPTCHA = 300;
+
+    public static final String COOKIE_CAPTCHA = "captcha";
+
+}

+ 14 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/DevLanguageConstants.java

@@ -0,0 +1,14 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午9:59 2018/3/22
+ * @Modified By:
+ */
+public class DevLanguageConstants {
+
+    public static final String JAVA="Java";
+
+    public static final String PYTHON="Python";
+}

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/DownloadConstants.java

@@ -11,4 +11,8 @@ public class DownloadConstants {
     public static String SAVE_PATH="/var/www/download/";
     public static String SAVE_PATH="/var/www/download/";
 
 
     public static String DOWNLOAD_PATH="/download/";
     public static String DOWNLOAD_PATH="/download/";
+
+    public static String HEADIMAGE_PATH=DOWNLOAD_PATH+"/headImage";
+
+    public static String CERTIFICATE_PATH=DOWNLOAD_PATH+"/certificate";
 }
 }

+ 18 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/MutationResultType.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.site.common.constant;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午3:37 2018/3/14
+ * @Modified By:
+ */
+public class MutationResultType {
+
+    public final static String MUTAION_NODE="caughtNode";
+
+    public final static String MUTAION_RESULT="mutation";
+
+    public final static String MUTAION_NODE_RESULT="mutation_node";
+
+    public final static String MUTATION_META_NODE="metaNode";
+}

+ 0 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/PageConstants.java

@@ -1,11 +0,0 @@
-package cn.iselab.mooctest.site.common.constant;
-
-/**
- * Created by Liu on 2017/1/3.
- */
-public class PageConstants {
-    /**
-     * Pagination
-     */
-    public static final int PAGE_SIZE = 10;
-}

+ 0 - 12
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/PrivilegeConstants.java

@@ -1,12 +0,0 @@
-package cn.iselab.mooctest.site.common.constant;
-
-/**
- * Created by Liu on 2017/3/21.
- */
-public class PrivilegeConstants {
-    public static final int SUPER_GROUP_ID = 0;
-
-    public static final int SUPER_MANAGER_ID = 13;
-
-    public static final String SUPER_MANAGER_NAME = "陈振宇";
-}

+ 0 - 12
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ProjectConstants.java

@@ -1,12 +0,0 @@
-package cn.iselab.mooctest.site.common.constant;
-
-/**
- * @author liuzicong
- */
-public class ProjectConstants {
-
-    public static String PROJECT_NAME = "mooctest-site";
-
-
-
-}

+ 0 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/UrlConstants.java

@@ -9,16 +9,8 @@ public class UrlConstants {
     // public static final String API = "/account/{client:api|iphone|ipad|android}";
     // public static final String API = "/account/{client:api|iphone|ipad|android}";
 
 
     public static final String API_COMMON = "/api/common/";
     public static final String API_COMMON = "/api/common/";
-    public static final String API_MANAGER = "/api/manager/";
-    public static final String API_WORKER = "/api/worker/";
-    public static final String API_ADMIN = "/api/admin/";
-    public static final String API_INTERNAL = "/api/internal/";
     public static final String API_WECHAT = "/api/wechat/";
     public static final String API_WECHAT = "/api/wechat/";
-    public static final String API_CLIENT = "/api/client/";
     public static final String API_KIBUG = "/api/kibug/";
     public static final String API_KIBUG = "/api/kibug/";
-    public static final String API_USER = "/api/user/";
-
-    public static final String HOSTNAME = "http://mooctest.net/";
 
 
     public static final String API_DEV = "/api/dev/";
     public static final String API_DEV = "/api/dev/";
     public static final String API_TARGET = "/api/target/";
     public static final String API_TARGET = "/api/target/";

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/AsyncJobTool.java

@@ -6,7 +6,8 @@ import lombok.Getter;
  * Created by tangshanshan on 2018/2/26.
  * Created by tangshanshan on 2018/2/26.
  */
  */
 public enum AsyncJobTool {
 public enum AsyncJobTool {
-    MUTATION("mockTool",(short)1),PDF("pdf",(short)2);
+    MOCKTOOL("mockTool",(short)1),PDF("pdf",(short)2),MUTATION("mutation",(short)3),MCNODE("mcNode",(short)4),
+    PYTHON_NODE("python-node",(short)5);
 
 
     @Getter
     @Getter
     private String name;
     private String name;

+ 0 - 9
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CryptKeys.java

@@ -1,9 +0,0 @@
-package cn.iselab.mooctest.site.common.enums;
-
-/**
- * Created by jessiechen on 2016/10/24.
- */
-public interface CryptKeys {
-    String REPORT_ID_KEY = "jessiechen123report";
-    String PLUGIN_SCERET = "witest.net";
-}

+ 9 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ScoreRuleKey.java

@@ -14,5 +14,13 @@ public enum ScoreRuleKey {
     AD,
     AD,
     ADU,
     ADU,
     MUTATION,
     MUTATION,
-    APFD
+    APFD,
+
+    python,
+
+    //selenium
+    ELEMENT,
+    OPERATION,
+    PAGE
+
 }
 }

+ 0 - 9
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/SessionKey.java

@@ -1,9 +0,0 @@
-package cn.iselab.mooctest.site.common.enums;
-
-/**
- * Created by Liu on 2017/6/5.
- */
-public enum SessionKey {
-    ID,
-    IDENTITY
-}

+ 0 - 28
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/TaskStatus.java

@@ -1,28 +0,0 @@
-package cn.iselab.mooctest.site.common.enums;
-
-public enum TaskStatus {
-	UPCOMING(0), ONGOING(1), FINISHED(2);
-
-	private int _value;
-
-	TaskStatus(int Value) {
-		this._value = Value;
-	}
-
-	public int getValue() {
-		return _value;
-	}
-
-	public static TaskStatus fromInt(int i) {
-		for (TaskStatus b : TaskStatus.values()) {
-			if (b.getValue() == i) {
-				return b;
-			}
-		}
-		return null;
-	}
-	
-	public String toString(){
-		return String.valueOf(this._value);
-	}
-}

+ 0 - 29
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/UserType.java

@@ -1,29 +0,0 @@
-package cn.iselab.mooctest.site.common.enums;
-
-public enum UserType {
-
-    ADMIN(0), MANAGER(1), WORKER(2), ALL(3);
-
-    private int _value;
-
-    UserType(int Value) {
-        this._value = Value;
-    }
-
-    public int getValue() {
-        return _value;
-    }
-
-    public static UserType fromInt(int i) {
-        for (UserType b : UserType.values()) {
-            if (b.getValue() == i) {
-                return b;
-            }
-        }
-        return null;
-    }
-
-    public String toString() {
-        return String.valueOf(this._value);
-    }
-}

+ 18 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/AddTask2CompetitionEvent.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.site.common.event;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Created by tangshanshan on 2018/3/19.
+ */
+@Getter
+@AllArgsConstructor
+public class AddTask2CompetitionEvent implements Event {
+    private Long competitionId;
+    private Long taskId;
+    @Override
+    public String getDescription() {
+        return "add task to competition";
+    }
+}

+ 0 - 23
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/AppCreateEvent.java

@@ -1,23 +0,0 @@
-package cn.iselab.mooctest.site.common.event;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-@AllArgsConstructor
-public class AppCreateEvent implements Event {
-
-    private long applicationId;
-
-    public static AppCreateEvent create(long applicationId) {
-        return new AppCreateEvent(applicationId);
-    }
-
-    @Override
-    public String getDescription() {
-        return String.format("statistics id: %s", applicationId);
-    }
-
-}

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EnterCompetitionEvent.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.common.event;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * Created by tangshanshan on 2018/3/14.
+ */
+@Getter
+@AllArgsConstructor
+public class EnterCompetitionEvent implements Event{
+    private Long userId;
+    private Long competitionId;
+
+    @Override
+    public String getDescription() {
+        return String.format("user %s enter competition %s", userId,competitionId);
+    }
+}

+ 77 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java

@@ -0,0 +1,77 @@
+package cn.iselab.mooctest.site.common.event;
+
+import cn.iselab.mooctest.site.models.Competition;
+import cn.iselab.mooctest.site.models.Competition2Task;
+import cn.iselab.mooctest.site.service.CompetitionService;
+import cn.iselab.mooctest.site.service.ContestMentorService;
+import cn.iselab.mooctest.site.service.GroupService;
+import cn.iselab.mooctest.site.service.TargetService;
+import cn.iselab.mooctest.site.web.logic.CaseLogic;
+import cn.iselab.mooctest.site.web.logic.ExamLogic;
+import com.google.common.eventbus.Subscribe;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+@Component
+public class EventsListener implements InitializingBean {
+
+    @Autowired
+    private EventUtil eventUtil;
+
+    @Autowired
+    private ContestMentorService instructorService;
+
+    @Autowired
+    private TargetService targetService;
+
+    @Autowired
+    private CaseLogic caseLogic;
+
+    @Autowired
+    private CompetitionService competitionService;
+
+    @Autowired
+    private ExamLogic examLogic;
+
+    @Autowired
+    private GroupService groupService;
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        eventUtil.register(this);
+    }
+
+    @Subscribe
+    public void updateContestMentorPermission(UpdateContestMentorEvent event) throws Exception {
+        instructorService.updateContestMentorPermission(event.getQualificationId(), event.getTeacherEmails());
+    }
+
+    @Subscribe
+    public void afterAddTask2Competition(AddTask2CompetitionEvent event) throws Exception {
+        instructorService.addContestMentorPermission(event.getCompetitionId(),event.getTaskId());
+    }
+
+    @Subscribe
+    public void publicityTarget(PublicityTargetEvent publicityTargetEvent) throws Exception {
+        targetService.publicityTarget(publicityTargetEvent.getTargetId());
+    }
+
+    @Subscribe
+    public void publicityCase(PublicityCaseEvent publicityCaseEvent) throws Exception {
+        caseLogic.publicityCase(publicityCaseEvent.getCaseId());
+    }
+
+    @Subscribe
+    public void afterEnterCompetition(EnterCompetitionEvent enterCompetitionEvent) throws Exception {
+        Competition competition = competitionService.getCompetiton(enterCompetitionEvent.getCompetitionId());
+        if(competition.getStatus() > 0) {
+            Competition2Task competition2Task = competitionService.getCompetition2TaskbyCompetitionIdAndIndex(
+                    enterCompetitionEvent.getCompetitionId(), competition.getStatus());
+            Long groupId = examLogic.getExamById(competition2Task.getTaskId()).getGroupIds().get(0);
+            if (!groupService.isUserInGroup(enterCompetitionEvent.getUserId(), groupId)) {
+                groupService.addUserIntoGroup(enterCompetitionEvent.getUserId(), groupId);
+            }
+        }
+    }
+}

+ 0 - 25
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/ReportCreateEvent.java

@@ -1,25 +0,0 @@
-package cn.iselab.mooctest.site.common.event;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Getter;
-
-@Getter
-@Builder
-@AllArgsConstructor
-public class ReportCreateEvent implements Event {
-
-    private long applicationId;
-    private String model;
-    private String os;
-
-    public static ReportCreateEvent create(long applicationId, String model, String os) {
-        return new ReportCreateEvent(applicationId, model, os);
-    }
-
-    @Override
-    public String getDescription() {
-        return String.format("statistics id: %s model: %s, value: %s", applicationId, model, os);
-    }
-
-}

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/ScoreRuleChangeEvent.java

@@ -0,0 +1,4 @@
+package cn.iselab.mooctest.site.common.event;
+
+public class ScoreRuleChangeEvent {
+}

+ 0 - 60
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/StatisEventsListener.java

@@ -1,60 +0,0 @@
-package cn.iselab.mooctest.site.common.event;
-
-import cn.iselab.mooctest.site.service.ContestMentorService;
-import cn.iselab.mooctest.site.service.TargetService;
-import cn.iselab.mooctest.site.service.fromKibug.StatisService;
-import cn.iselab.mooctest.site.web.logic.CaseLogic;
-import com.google.common.eventbus.Subscribe;
-import org.springframework.beans.factory.InitializingBean;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Component;
-
-@Component
-public class StatisEventsListener implements InitializingBean {
-
-    @Autowired
-    private EventUtil eventUtil;
-
-    @Autowired
-    private StatisService statisService;
-
-    @Autowired
-    private ContestMentorService instructorService;
-
-    @Autowired
-    private TargetService targetService;
-
-    @Autowired
-    private CaseLogic caseLogic;
-
-    @Override
-    public void afterPropertiesSet() throws Exception {
-        eventUtil.register(this);
-    }
-
-    @Subscribe
-    public void statisApp(AppCreateEvent event) throws Exception {
-        statisService.create(event.getApplicationId());
-
-    }
-
-    @Subscribe
-    public void statisReport(ReportCreateEvent event) throws Exception {
-        statisService.statAppTesterMobile(event.getApplicationId(), event.getModel(), event.getOs(), 1);
-    }
-
-    @Subscribe
-    public void updateContestMentorPermission(UpdateContestMentorEvent event) throws Exception {
-        instructorService.updateContestMentorPermisson(event.getExamId(),event.getStudentId(), event.getTeacherEmails());
-    }
-
-    @Subscribe
-    public void publicityTarget(PublicityTargetEvent publicityTargetEvent) throws Exception {
-        targetService.publicityTarget(publicityTargetEvent.getTargetId());
-    }
-
-    @Subscribe
-    public void publicityCase(PublicityCaseEvent publicityCaseEvent) throws Exception {
-        caseLogic.publicityCase(publicityCaseEvent.getCaseId());
-    }
-}

+ 1 - 4
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/UpdateContestMentorEvent.java

@@ -1,12 +1,10 @@
 package cn.iselab.mooctest.site.common.event;
 package cn.iselab.mooctest.site.common.event;
 
 
-import cn.iselab.mooctest.site.web.data.ContestMentorVO;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;
 import lombok.Builder;
 import lombok.Builder;
 import lombok.Getter;
 import lombok.Getter;
 
 
 import java.util.List;
 import java.util.List;
-import java.util.stream.Collectors;
 
 
 /**
 /**
  * Created by shanshan on 2017/9/15.
  * Created by shanshan on 2017/9/15.
@@ -15,8 +13,7 @@ import java.util.stream.Collectors;
 @Builder
 @Builder
 @AllArgsConstructor
 @AllArgsConstructor
 public class UpdateContestMentorEvent  implements Event {
 public class UpdateContestMentorEvent  implements Event {
-    private Long examId;
-    private Long studentId;
+    private Long qualificationId;
     private List<String> teacherEmails;
     private List<String> teacherEmails;
 
 
     @Override
     @Override

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/listener/ScoreRuleListener.java

@@ -0,0 +1,4 @@
+package cn.iselab.mooctest.site.common.event.listener;
+
+public class ScoreRuleListener {
+}

+ 29 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/initialize/InitExamSchedulerMap.java

@@ -0,0 +1,29 @@
+package cn.iselab.mooctest.site.common.initialize;
+
+import cn.iselab.mooctest.site.util.BeanFactory;
+import cn.iselab.mooctest.site.web.ctrl.ExamController;
+import org.springframework.beans.factory.InitializingBean;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
+import org.springframework.stereotype.Component;
+
+/**
+ * Created by tangshanshan on 2018/4/17.
+ */
+@Component
+@ConditionalOnExpression("${featureSwitch.server.initExamScheduler}==true")
+public class InitExamSchedulerMap implements InitializingBean{
+    @Autowired
+    private BeanFactory beanFactory;
+
+    @Override
+    public void afterPropertiesSet() throws Exception {
+        System.out.println("-----------------------------------------------------------------------------------------");
+        System.out.println("listener");
+        ExamController examController = (ExamController)beanFactory.getBean(ExamController.class);
+        examController.updateStatusForAllTask();
+        examController.startInitExamSchedulerMap();
+        System.out.println("exam scheduler map initialized");
+        System.out.println("-----------------------------------------------------------------------------------------");
+    }
+}

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/mqListener/AsyncToolMessageReceiver.java

@@ -36,18 +36,19 @@ public class AsyncToolMessageReceiver {
         JSONObject jResult = JSONObject.fromObject(sResult.toString());
         JSONObject jResult = JSONObject.fromObject(sResult.toString());
         String jobId = jResult.getString("jobId");
         String jobId = jResult.getString("jobId");
         int returnCode = jResult.getInt("returnCode");
         int returnCode = jResult.getInt("returnCode");
-        String resultDetail = asyncScheduleService.getJobResult(jobId).getResult();
 
 
         int jobStatus = returnCode==ReturnCodeConstants.SUCCESS? AsyncJobStatus.SUCCESS:AsyncJobStatus.FAIL;
         int jobStatus = returnCode==ReturnCodeConstants.SUCCESS? AsyncJobStatus.SUCCESS:AsyncJobStatus.FAIL;
 
 
         try{
         try{
+            String resultDetail = asyncScheduleService.getJobResult(jobId).getResult();
             asyncScheduleService.processJobResult(jobId, resultDetail, returnCode);
             asyncScheduleService.processJobResult(jobId, resultDetail, returnCode);
             LOG.info("receiver:"+ sResult);
             LOG.info("receiver:"+ sResult);
         } catch (Exception e) {
         } catch (Exception e) {
             jobStatus = AsyncJobStatus.FAIL;
             jobStatus = AsyncJobStatus.FAIL;
+            e.printStackTrace();
             LOG.error("receive job result error "+ e.getMessage());
             LOG.error("receive job result error "+ e.getMessage());
+        } finally {
+            asyncTaskService.updateJobStatus(jobId, jobStatus);
         }
         }
-
-        asyncTaskService.updateJobStatus(jobId, jobStatus);
     }
     }
 }
 }

+ 0 - 1063
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/template/MailTemplates.java

@@ -1,1063 +0,0 @@
-package cn.iselab.mooctest.site.common.template;
-
-import cn.iselab.mooctest.site.common.constant.UrlConstants;
-
-public class MailTemplates {
-
-	public static String getResetPasswordTemplate(String name, String resetLink){
-		return resetPasswordTemplate.replace("#resetLink#", resetLink).replace("#realname#", name);
-	}	
-	
-	public static String getBindEmailTemplate(String name, String resetLink){
-		return bindEmailTemplate.replace("#resetLink#", resetLink).replace("#realname#", name);
-	}		
-
-
-	public static String getManagerRegisterNoticeTemplate(String name,
-			String reviewerEmail, String auditTemplate, String hostname) {
-		return managerRegisterNoticeTemplate.replace("#realname#", name).replace("#reviewerEmail#", reviewerEmail).replace("#auditTemplate#", auditTemplate).replace("#hostname#", hostname);
-	}
-		
-	private static final String resetPasswordTemplate = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />" + 
-			"<meta name=\"viewport\" content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0;\">" + 
-			"<title>重置密码</title>" + 
-			"<style type=\"text/css\">" + 
-			"div, p, a, li, td { -webkit-text-size-adjust:none; }" + 
-			".ReadMsgBody" + 
-			"{width: 100%; background-color: #ffffff;}" + 
-			".ExternalClass" + 
-			"{width: 100%; background-color: #ffffff;}" + 
-			"body{width: 100%; height: 100%; background-color: #ffffff; margin:0; padding:0; -webkit-font-smoothing: antialiased;}" + 
-			"html{width: 100%;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novalight';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_nova_rgregular'; src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novasemibold';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"    " + 
-			"@font-face {" + 
-			"	font-family: 'proxima_nova_rgbold';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"	" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novablack';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"    " + 
-			"@font-face {font-family: 'proxima_novathin';src: url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"p {padding: 0!important; margin-top: 0!important; margin-right: 0!important; margin-bottom: 0!important; margin-left: 0!important; }" + 
-			".hover:hover {opacity:0.85;filter:alpha(opacity=85);}" + 
-			".image77 img {width: 77px; height: auto;}" + 
-			".avatar125 img {width: 125px; height: auto;}" + 
-			".icon61 img {width: 61px; height: auto;}" + 
-			".image75 img {width: 75px; height: auto;}" + 
-			".icon18 img {width: 18px; height: auto;}" + 
-			"</style>" + 
-			"<!-- @media only screen and (max-width: 640px) " + 
-			"		   {*/" + 
-			"		   -->" + 
-			"<style type=\"text/css\"> @media only screen and (max-width: 640px){" + 
-			"		body{width:auto!important;}" + 
-			"		table[class=full2] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile2] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=pad15] {width: 100%!important; padding-left: 15px; padding-right: 15px; clear: both;}" + 
-			"		" + 
-			"} </style>" + 
-			"<!--" + 
-			"@media only screen and (max-width: 479px) " + 
-			"		   {" + 
-			"		   -->" + 
-			"<style type=\"text/css\"> @media only screen and (max-width: 479px){" + 
-			"		body{width:auto!important;}" + 
-			"		table[class=full2] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile2] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		table[class=full] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=pad15] {width: 100%!important; padding-left: 15px; padding-right: 15px; clear: both;}" + 
-			"		.erase {display: none;}" + 
-			"				" + 
-			"		}" + 
-			"} </style>" + 
-			"<!-- Notification 6 -->" + 
-			"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full2\"  bgcolor=\"#303030\"style=\"background-color: rgb(48, 48, 48);\">" + 
-			"	<tr>" + 
-			"		<td style=\"background-image: url(" + UrlConstants.HOSTNAME + "/public/images/mail/not4_bg_image.jpg); -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; background-position: center center; background-repeat: no-repeat;\" id=\"not6\">" +
-			"		" + 
-			"			" + 
-			"			<!-- Mobile Wrapper -->" + 
-			"			<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\">" + 
-			"				<tr>" + 
-			"					<td width=\"100%\">" + 
-			"					" + 
-			"						<div class=\"sortable_inner ui-sortable\">" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"50\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"						" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"50\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"			" + 
-			"						<!-- Start Top -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#4edeb5\" style=\"border-top-left-radius: 5px; border-top-right-radius: 5px; background-color: #3581C1;\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\" class=\"image75\">" + 
-			"									" + 
-			"									<!-- Header Text --> " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"										<tr>" + 
-			"											<td width=\"100%\"><span ><img editable=\"true\" src=\"" + UrlConstants.HOSTNAME + "/public/images/mail/image_77px_not2.png\" width=\"75\" alt=\"\" border=\"0\" ></span></td>" + 
-			"										</tr>" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 23px; color: rgb(63, 67, 69); line-height: 30px; font-weight: 100;\">" + 
-			"												<!--[if !mso]><!--><span style=\"font-family: 'proxima_novathin', Helvetica; font-weight: normal;\"><!--<![endif]--><singleline>Hi  #realname#, </singleline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 14px; color: rgb(63, 67, 69); line-height: 24px;\">" + 
-			"												<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]--><singleline>感谢您使用慕测平台产品,请点击以下链接重置密码: </singleline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"40\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<!----------------- Button Center ----------------->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td>" + 
-			"												<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\"> " + 
-			"													<tr> " + 
-			"														<td align=\"center\" height=\"45\"bgcolor=\"#4edeb5\" style=\"border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding-left: 30px; padding-right: 30px; font-weight: bold; font-family: Helvetica, Arial, sans-serif; color: rgb(255, 255, 255); background-color: #3581C1;\">" + 
-			"															<multiline><!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgbold', Helvetica; font-weight: normal;\"><!--<![endif]-->" + 
-			"																<a href=\"#resetLink#\" style=\"color: rgb(255, 255, 255); font-size: 15px; text-decoration: none; line-height: 34px; width: 100%;\">重置密码</a>" + 
-			"															<!--[if !mso]><!--></span><!--<![endif]--></multiline>" + 
-			"														</td> " + 
-			"													</tr> " + 
-			"												</table> " + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table><!----------------- End Button Center ----------------->" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"35\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 14px; color: rgb(63, 67, 69); line-height: 24px;\">" + 
-			"												<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]--><multiline>欢迎您随时给出反馈和建议!" + 
-			"												<br><br>" + 
-			"												感谢您的支持!" + 
-			"												<br>" + 
-			"												Mooctest.net慕测平台" + 
-			"													" + 
-			"												</multiline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"style=\"border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; background-color: rgb(255, 255, 255);\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"50\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"																	" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"30\"></td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(255, 255, 255); line-height: 24px; font-style: italic;\">" + 
-			"									<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]-->Copyright mooctest.net <!--<![endif]--></span><!--[if !mso]><!-->" + 
-			"									" + 
-			"									" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"30\"></td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"29\"></td>" + 
-			"							</tr>" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"1\"></td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						</div>" + 
-			"						" + 
-			"					</td>" + 
-			"				</tr>" + 
-			"			</table>" + 
-			"			" + 
-			"		</div>" + 
-			"		</td>" + 
-			"	</tr>" + 
-			"</table><!-- End Notification 6 -->" + 
-			"</div>	<style>body{ background: none !important; } </style>";
-	
-	
-	private static final String bindEmailTemplate = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />" + 
-			"<meta name=\"viewport\" content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0;\">" + 
-			"<title>绑定邮箱</title>" + 
-			"<style type=\"text/css\">" + 
-			"div, p, a, li, td { -webkit-text-size-adjust:none; }" + 
-			".ReadMsgBody" + 
-			"{width: 100%; background-color: #ffffff;}" + 
-			".ExternalClass" + 
-			"{width: 100%; background-color: #ffffff;}" + 
-			"body{width: 100%; height: 100%; background-color: #ffffff; margin:0; padding:0; -webkit-font-smoothing: antialiased;}" + 
-			"html{width: 100%;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novalight';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_nova_rgregular'; src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novasemibold';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"    " + 
-			"@font-face {" + 
-			"	font-family: 'proxima_nova_rgbold';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"	" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novablack';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"    " + 
-			"@font-face {font-family: 'proxima_novathin';src: url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"p {padding: 0!important; margin-top: 0!important; margin-right: 0!important; margin-bottom: 0!important; margin-left: 0!important; }" + 
-			".hover:hover {opacity:0.85;filter:alpha(opacity=85);}" + 
-			".image77 img {width: 77px; height: auto;}" + 
-			".avatar125 img {width: 125px; height: auto;}" + 
-			".icon61 img {width: 61px; height: auto;}" + 
-			".image75 img {width: 75px; height: auto;}" + 
-			".icon18 img {width: 18px; height: auto;}" + 
-			"</style>" + 
-			"<!-- @media only screen and (max-width: 640px) " + 
-			"		   {*/" + 
-			"		   -->" + 
-			"<style type=\"text/css\"> @media only screen and (max-width: 640px){" + 
-			"		body{width:auto!important;}" + 
-			"		table[class=full2] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile2] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=pad15] {width: 100%!important; padding-left: 15px; padding-right: 15px; clear: both;}" + 
-			"		" + 
-			"} </style>" + 
-			"<!--" + 
-			"@media only screen and (max-width: 479px) " + 
-			"		   {" + 
-			"		   -->" + 
-			"<style type=\"text/css\"> @media only screen and (max-width: 479px){" + 
-			"		body{width:auto!important;}" + 
-			"		table[class=full2] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile2] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		table[class=full] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=pad15] {width: 100%!important; padding-left: 15px; padding-right: 15px; clear: both;}" + 
-			"		.erase {display: none;}" + 
-			"				" + 
-			"		}" + 
-			"} </style>" + 
-			"<!-- Notification 6 -->" + 
-			"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full2\"  bgcolor=\"#303030\"style=\"background-color: rgb(48, 48, 48);\">" + 
-			"	<tr>" + 
-			"		<td style=\"background-image: url(" + UrlConstants.HOSTNAME + "/public/images/mail/not4_bg_image.jpg); -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; background-position: center center; background-repeat: no-repeat;\" id=\"not6\">" + 
-			"		" + 
-			"			" + 
-			"			<!-- Mobile Wrapper -->" + 
-			"			<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\">" + 
-			"				<tr>" + 
-			"					<td width=\"100%\">" + 
-			"					" + 
-			"						<div class=\"sortable_inner ui-sortable\">" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"50\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"						" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"50\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"			" + 
-			"						<!-- Start Top -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#4edeb5\" style=\"border-top-left-radius: 5px; border-top-right-radius: 5px; background-color: #3581C1;\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\" class=\"image75\">" + 
-			"									" + 
-			"									<!-- Header Text --> " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"										<tr>" + 
-			"											<td width=\"100%\"><span ><img editable=\"true\" src=\"" + UrlConstants.HOSTNAME + "/public/images/mail/not6_icon75px.png\" width=\"75\" alt=\"\" border=\"0\" ></span></td>" + 
-			"										</tr>" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 23px; color: rgb(63, 67, 69); line-height: 30px; font-weight: 100;\">" + 
-			"												<!--[if !mso]><!--><span style=\"font-family: 'proxima_novathin', Helvetica; font-weight: normal;\"><!--<![endif]--><singleline>Hi  #realname#, </singleline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"30\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 14px; color: rgb(63, 67, 69); line-height: 24px;\">" + 
-			"												<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]--><singleline>感谢您使用慕测平台产品,请点击以下链接确认绑定邮箱: </singleline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"40\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<!----------------- Button Center ----------------->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td>" + 
-			"												<table border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"left\"> " + 
-			"													<tr> " + 
-			"														<td align=\"center\" height=\"45\"bgcolor=\"#4edeb5\" style=\"border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; padding-left: 30px; padding-right: 30px; font-weight: bold; font-family: Helvetica, Arial, sans-serif; color: rgb(255, 255, 255); background-color: #3581C1;\">" + 
-			"															<multiline><!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgbold', Helvetica; font-weight: normal;\"><!--<![endif]-->" + 
-			"																<a href=\"#resetLink#\" style=\"color: rgb(255, 255, 255); font-size: 15px; text-decoration: none; line-height: 34px; width: 100%;\">确认绑定邮箱</a>" + 
-			"															<!--[if !mso]><!--></span><!--<![endif]--></multiline>" + 
-			"														</td> " + 
-			"													</tr> " + 
-			"												</table> " + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table><!----------------- End Button Center ----------------->" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"35\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 14px; color: rgb(63, 67, 69); line-height: 24px;\">" + 
-			"												<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]--><multiline>欢迎您随时给出反馈和建议!" + 
-			"												<br><br>" + 
-			"												感谢您的支持!" + 
-			"												<br>" + 
-			"												Mooctest.net慕测平台" + 
-			"													" + 
-			"												</multiline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" bgcolor=\"#ffffff\"style=\"border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; background-color: rgb(255, 255, 255);\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"								 " + 
-			"									<table width=\"540\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter2\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" height=\"50\"></td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"																	" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"30\"></td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 13px; color: rgb(255, 255, 255); line-height: 24px; font-style: italic;\">" + 
-			"									<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]-->Copyright mooctest.net <!--<![endif]--></span><!--[if !mso]><!-->" + 
-			"									" + 
-			"									" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"30\"></td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile2\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"29\"></td>" + 
-			"							</tr>" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"1\"></td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						</div>" + 
-			"						" + 
-			"					</td>" + 
-			"				</tr>" + 
-			"			</table>" + 
-			"			" + 
-			"		</div>" + 
-			"		</td>" + 
-			"	</tr>" + 
-			"</table><!-- End Notification 6 -->" + 
-			"</div>	<style>body{ background: none !important; } </style>";
-
-
-	private static String managerRegisterNoticeTemplate = "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />" + 
-			"<meta name=\"viewport\" content=\"width=device-width; initial-scale=1.0; maximum-scale=1.0;\">" + 
-			"<title>Notify</title>" + 
-			"<style type=\"text/css\">" + 
-			"div, p, a, li, td { -webkit-text-size-adjust:none; }" + 
-			".ReadMsgBody" + 
-			"{width: 100%; background-color: #ffffff;}" + 
-			".ExternalClass" + 
-			"{width: 100%; background-color: #ffffff;}" + 
-			"body{width: 100%; height: 100%; background-color: #ffffff; margin:0; padding:0; -webkit-font-smoothing: antialiased;}" + 
-			"html{width: 100%;}" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novalight';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-light-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" +  
-			"@font-face {" + 
-			"    font-family: 'proxima_nova_rgregular'; src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-regular-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" +  
-			"@font-face {" + 
-			"    font-family: 'proxima_novasemibold';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-semibold-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"    " + 
-			"@font-face {" + 
-			"	font-family: 'proxima_nova_rgbold';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-bold-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"	" + 
-			"@font-face {" + 
-			"    font-family: 'proxima_novablack';src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/titan/font/proximanova-black-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" + 
-			"    " + 
-			"@font-face {font-family: 'proxima_novathin';src: url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.eot');src: url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.eot?#iefix') format('embedded-opentype'),url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.woff') format('woff'),url('http://rocketway.net/themebuilder/template/templates/mason/font/proximanova-thin-webfont.ttf') format('truetype');font-weight: normal;font-style: normal;}" +   
-			"p {padding: 0!important; margin-top: 0!important; margin-right: 0!important; margin-bottom: 0!important; margin-left: 0!important; }" +   
-			".hover:hover {opacity:0.85;filter:alpha(opacity=85);}" +   
-			".image77 img {width: 77px; height: auto;}" + 
-			".avatar125 img {width: 125px; height: auto;}" + 
-			".icon61 img {width: 61px; height: auto;}" + 
-			".image75 img {width: 75px; height: auto;}" + 
-			".icon18 img {width: 18px; height: auto;}" +   
-			"</style>" +  
-			"<!-- @media only screen and (max-width: 640px) " + 
-			"		   {*/" + 
-			"		   -->" + 
-			"<style type=\"text/css\"> @media only screen and (max-width: 640px){" + 
-			"		body{width:auto!important;}" + 
-			"		table[class=full2] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile2] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=pad15] {width: 100%!important; padding-left: 15px; padding-right: 15px; clear: both;}" + 
-			"		" + 
-			"} </style>" + 
-			"<!--" +   
-			"@media only screen and (max-width: 479px) " + 
-			"		   {" + 
-			"		   -->" + 
-			"<style type=\"text/css\"> @media only screen and (max-width: 479px){" + 
-			"		body{width:auto!important;}" + 
-			"		table[class=full2] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile2] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter2] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		table[class=full] {width: 100%!important; clear: both; }" + 
-			"		table[class=mobile] {width: 100%!important; padding-left: 20px; padding-right: 20px; clear: both; }" + 
-			"		table[class=fullCenter] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=fullCenter] {width: 100%!important; text-align: center!important; clear: both; }" + 
-			"		td[class=pad15] {width: 100%!important; padding-left: 15px; padding-right: 15px; clear: both;}" + 
-			"		.erase {display: none;}" + 
-			"				" + 
-			"		}" + 
-			"} </style>" +     
-			"<!-- Notification 3 -->" + 
-			"<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\"  bgcolor=\"#303030\"style=\"background-color: rgb(48, 48, 48);\">" + 
-			"	<tr>" + 
-			"		<td style=\"background-image: url(" + UrlConstants.HOSTNAME + "/public/images/mail/not6_bg_image.jpg); -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; background-position: center center; background-repeat: no-repeat; background-color: #23282b;\" id=\"not3\">" + 
-			"		" + 
-			"			" + 
-			"			<!-- Mobile Wrapper -->" + 
-			"			<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"				<tr>" + 
-			"					<td width=\"100%\">" + 
-			"					" + 
-			"						<div class=\"sortable_inner ui-sortable\">" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"30\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"						" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"50\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"						</div>" + 
-			"						" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\" bgcolor=\"#ffffff\"style=\"border-top-left-radius: 5px; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; -webkit-box-shadow: rgba(68, 68, 68, 0.6) 5px 5px 5px; box-shadow: rgba(68, 68, 68, 0.2) 0px 0px 7px; background-color: rgb(255, 255, 255);\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" valign=\"middle\">" + 
-			"									" + 
-			"									" + 
-			"									<div class=\"sortable_inner ui-sortable\">" + 
-			"									<!-- Start Top -->" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\" bgcolor=\"#ffffff\"style=\"border-top-left-radius: 5px; border-top-right-radius: 5px; background-color: rgb(255, 255, 255);\" object=\"drag-module-small\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"												" + 
-			"												<!-- Header Text --> " + 
-			"												<table width=\"300\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" height=\"30\"></td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"											" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" height=\"40\"></td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"											" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter\">" + 
-			"													<tr>" + 
-			"														<td valign=\"middle\" width=\"100%\" style=\"text-align: center; font-family: Helvetica, Arial, sans-serif; font-size: 43px; color: rgb(63, 67, 69); line-height: 48px;\"class=\"fullCenter\" >" + 
-			"															<!--[if !mso]><!--><span style=\"font-family: 'proxima_novasemibold', Helvetica; font-weight: normal;\"><!--<![endif]--><singleline>欢迎</singleline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"											" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" style=\"text-align: center; border-collapse:collapse; mso-table-lspace:0pt; mso-table-rspace:0pt;\" class=\"fullCenter\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" height=\"45\"></td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																<tr>" + 
-			"																	<td width=\"100%\" height=\"30\"></td>" + 
-			"																</tr>" + 
-			"																<tr>" + 
-			"																	<td valign=\"middle\" width=\"100%\" style=\"text-align: center; font-family: Helvetica, Arial, sans-serif; font-size: 30px; color: white; line-height: 34px;\"class=\"fullCenter\" >" + 
-			"																		<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]--><singleline>#realname#, 欢迎使用慕测平台!</singleline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"																	</td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																<tr>" + 
-			"																	<td width=\"100%\" height=\"30\"></td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																" + 
-			"																<tr>" + 
-			"																	<td valign=\"middle\" width=\"100%\" style=\"text-align: left; font-family: Helvetica, Arial, sans-serif; font-size: 14px; color: white; line-height: 24px;\"class=\"fullCenter\" >" + 
-			"																		<!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]--><multiline>在正式使用系统之前,我们可能需要验证您的身份。" + 
-			"																		<br>" + 
-			"																		<br>" + 
-			"																		在下面的链接中有一份身份验证文档的模板,请您填写完毕后由所在单位盖章,将扫描件以邮件形式发送给 </multiline><!--[if !mso]><!--></span><!--<![endif]-->" + 
-			"																	</td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																<tr>" + 
-			"																	<td width=\"100%\" height=\"40\"></td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<!----------------- Button Center ----------------->" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																" + 
-			"																<tr>" + 
-			"																	<td>" + 
-			"																		<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\"> " + 
-			"																			<tr> " + 
-			"																				<td align=\"center\" height=\"40\"bgcolor=\"#f0f0f0\" style=\"border-top-left-radius: 20px; border-top-right-radius: 20px; border-bottom-right-radius: 20px; border-bottom-left-radius: 20px; padding-left: 22px; padding-right: 22px; font-weight: bold; font-family: Helvetica, Arial, sans-serif; color: rgb(34, 32, 32); background-color: rgb(352, 352, 352);\">" + 
-			"																					<multiline><!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]-->" + 
-			"																						<a href=\"#\" style=\"color: rgb(34, 32, 32); font-size: 16px; text-decoration: none; line-height: 34px; width: 100%;\" >#reviewerEmail#</a>" + 
-			"																					<!--[if !mso]><!--></span><!--<![endif]--></multiline>" + 
-			"																				</td> " + 
-			"																			</tr> " + 
-			"																		</table> " + 
-			"																	</td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table><!----------------- End Button Center ----------------->" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																<tr>" + 
-			"																	<td width=\"100%\" height=\"15\"></td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																" + 
-			"																<!----------------- Button Center ----------------->" + 
-			"																<tr>" + 
-			"																	<td>" + 
-			"																		<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\"> " + 
-			"																			<tr> " + 
-			"																				<td align=\"center\" height=\"40\"bgcolor=\"#3f4345\" style=\"border-top-left-radius: 20px; border-top-right-radius: 20px; border-bottom-right-radius: 20px; border-bottom-left-radius: 20px; padding-left: 22px; padding-right: 22px; font-weight: bold; font-family: Helvetica, Arial, sans-serif; color: rgb(255, 255, 255); background-color: rgb(63, 67, 69);\">" + 
-			"																					<multiline><!--[if !mso]><!--><span style=\"font-family: 'proxima_nova_rgregular', Helvetica; font-weight: normal;\"><!--<![endif]-->" + 
-			"																						<a href=\"#auditTemplate#\" style=\"color: rgb(255, 255, 255); font-size: 16px; text-decoration: none; line-height: 34px; width: 100%;\">身份证明模板</a>" + 
-			"																					<!--[if !mso]><!--></span><!--<![endif]--></multiline>" + 
-			"																				</td> " + 
-			"																			</tr> " + 
-			"																		</table> " + 
-			"																	</td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																" + 
-			"																<tr>" + 
-			"																	<td width=\"100%\" height=\"40\"></td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"class=\"pad15\" style=\"background-color: #3581C1;\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																<tr>" + 
-			"																	<td valign=\"middle\" width=\"100%\" style=\"text-align: center; font-family: Helvetica, Arial, sans-serif; font-size: 14px; color: #3f4345; line-height: 24px;\" class=\"fullCenter\" >" + 
-			"																		<multiline><!--[if !mso]><!--><span style=\"font-family: proxima_nova_rgregular, Helvetica; font-weight: normal; color: white;\"><!--<![endif]-->使用慕测其它功能,请点击<!--[if !mso]><!--></span><!--<![endif]--> " + 
-			"																		<!--[if !mso]><!--><span style=\"font-family: 'proxima_novasemibold', Helvetica; font-weight: normal;\"><!--<![endif]--><a href=\"#hostname#\" style=\"color: white;\">主页</a><!--[if !mso]><!--></span><!--<![endif]--></multiline>" + 
-			"																	</td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"object=\"drag-module-small\" style=\"background-color: rgb(255, 255, 255);\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" bgcolor=\"#fdba30\"style=\"border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; background-color: #3581C1;\" class=\"pad15\">" + 
-			"														" + 
-			"															<table width=\"352\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\">" + 
-			"																" + 
-			"																<tr>" + 
-			"																	<td width=\"100%\" height=\"40\"></td>" + 
-			"																</tr>" + 
-			"															</table>" + 
-			"														</td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"												" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table>" + 
-			"									" + 
-			"									<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" bgcolor=\"#ffffff\"style=\"border-bottom-left-radius: 5px; border-bottom-right-radius: 5px; background-color: rgb(255, 255, 255);\" object=\"drag-module-small\">" + 
-			"										<tr>" + 
-			"											<td width=\"100%\" valign=\"middle\">" + 
-			"													" + 
-			"												<table width=\"420\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"mobile\">" + 
-			"													<tr>" + 
-			"														<td width=\"100%\" height=\"50\"></td>" + 
-			"													</tr>" + 
-			"												</table>" + 
-			"																				" + 
-			"											</td>" + 
-			"										</tr>" + 
-			"									</table><!-- End Top -->" + 
-			"									</div>" + 
-			"									" + 
-			"								</td>" + 
-			"							</tr>" + 
-			"						</table>" + 
-			"						" + 
-			"						<div class=\"sortable_inner ui-sortable\">" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"30\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"						" + 
-			"						<!-- Space -->" + 
-			"						<table width=\"600\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\" align=\"center\" class=\"full\" object=\"drag-module-small\">" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"50\"></td>" + 
-			"							</tr>" + 
-			"							<tr>" + 
-			"								<td width=\"100%\" height=\"1\"></td>" + 
-			"							</tr>" + 
-			"						</table><!-- End Space -->" + 
-			"						</div>" + 
-			"			" + 
-			"					</td>" + 
-			"				</tr>" + 
-			"			</table>" + 
-			"			" + 
-			"		</div>" + 
-			"		</td>" + 
-			"	</tr>" + 
-			"</table><!-- End Notification 3 -->" + 
-			"</div>	<style>body{ background: none !important; } </style>";
-
-}

+ 0 - 22
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ApplicationStartup.java

@@ -1,22 +0,0 @@
-package cn.iselab.mooctest.site.configure;
-
-import cn.iselab.mooctest.site.web.ctrl.ExamController;
-import org.springframework.context.ApplicationListener;
-import org.springframework.context.event.ContextRefreshedEvent;
-
-/**
- * Created by csc on 2017/7/25.
- */
-public class ApplicationStartup implements ApplicationListener<ContextRefreshedEvent> {
-    @Override
-    public void onApplicationEvent(ContextRefreshedEvent event)
-    {
-        System.out.println("-----------------------------------------------------------------------------------------");
-        System.out.println("listener");
-        ExamController examController = event.getApplicationContext().getBean(ExamController.class);
-        examController.updateStatusForAllTask();
-        examController.startInitExamSchedulerMap();
-        System.out.println("exam scheduler map initialized");
-        System.out.println("-----------------------------------------------------------------------------------------");
-    }
-}

+ 0 - 91
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/AuthFilterConfiguration.java

@@ -1,91 +0,0 @@
-package cn.iselab.mooctest.site.configure;
-
-import cn.iselab.mooctest.site.common.constant.UrlConstants;
-import cn.iselab.mooctest.site.web.constants.FilterConsts;
-import cn.iselab.mooctest.site.web.filter.*;
-import org.springframework.beans.factory.annotation.Qualifier;
-import org.springframework.boot.context.embedded.FilterRegistrationBean;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-import java.util.List;
-
-/**
- * @author sean
- * @date 2017-03-18.
- */
-@Configuration
-public class AuthFilterConfiguration {
-
-    @Bean(name = "authFilterConfig")
-    @ConfigurationProperties(prefix = "auth")
-    public FilterConfig createAuthFilterConfig() {
-        return new FilterConfig();
-    }
-
-    @Bean
-    public FilterRegistrationBean registerAuthFilter(AuthFilter authFilter,
-                                                     @Qualifier("authFilterConfig") FilterConfig filterConfig) {
-
-        authFilter.setEscapeUrls(filterConfig.getEscapeUrls());
-
-        FilterRegistrationBean bean = new FilterRegistrationBean(authFilter);
-        bean.addUrlPatterns(UrlConstants.API_WORKER + "*");
-        bean.addUrlPatterns(UrlConstants.API_COMMON + "*");
-        bean.addUrlPatterns(UrlConstants.API_MANAGER + "*");
-        bean.addUrlPatterns(UrlConstants.API_ADMIN + "*");
-        bean.setOrder(FilterConsts.ORDER_AUTH);
-
-        return bean;
-    }
-
-    @Bean
-    public FilterRegistrationBean registerWorkerAuthFilter(WorkerAuthFilter workerAuthFilter) {
-        FilterRegistrationBean bean = new FilterRegistrationBean(workerAuthFilter);
-        bean.addUrlPatterns(UrlConstants.API_WORKER + "*");
-        bean.addUrlPatterns(UrlConstants.API_COMMON + "*");
-        bean.setOrder(FilterConsts.ORDER_AUTH_WORKER);
-        return bean;
-    }
-
-    @Bean
-    public FilterRegistrationBean registerManagerAuthFilter(ManagerAuthFilter managerAuthFilter) {
-        FilterRegistrationBean bean = new FilterRegistrationBean(managerAuthFilter);
-        bean.addUrlPatterns(UrlConstants.API_MANAGER + "*");
-        bean.addUrlPatterns(UrlConstants.API_COMMON + "*");
-        bean.setOrder(FilterConsts.ORDER_AUTH_MANAGER);
-        return bean;
-    }
-
-    @Bean
-    public FilterRegistrationBean registerAdminAuthFilter(AdminAuthFilter adminAuthFilter) {
-        FilterRegistrationBean bean = new FilterRegistrationBean(adminAuthFilter);
-        bean.addUrlPatterns(UrlConstants.API_ADMIN + "*");
-        bean.addUrlPatterns(UrlConstants.API_COMMON + "*");
-        bean.setOrder(FilterConsts.ORDER_AUTH_ADMIN);
-        return bean;
-    }
-
-    @Bean
-    public FilterRegistrationBean registerApiHeaderFilter(ApiHeaderFilter apiHeaderFilter) {
-        FilterRegistrationBean bean = new FilterRegistrationBean(apiHeaderFilter);
-        bean.addUrlPatterns(UrlConstants.API_INTERNAL + "*");
-        return bean;
-    }
-
-    private class FilterConfig {
-
-        private List<String> escapeUrls;
-
-        public List<String> getEscapeUrls() {
-            return escapeUrls;
-        }
-
-        public void setEscapeUrls(List<String> escapeUrls) {
-            this.escapeUrls = escapeUrls;
-        }
-    }
-
-}
-

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/util/async/ExecutorConfig.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.site.util.async;
+package cn.iselab.mooctest.site.configure;
 
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;

+ 27 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/FileUploadConfiguration.java

@@ -0,0 +1,27 @@
+package cn.iselab.mooctest.site.configure;
+
+import org.springframework.boot.context.embedded.MultipartConfigFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import javax.servlet.MultipartConfigElement;
+
+/**
+ * Created by tangshanshan on 2018/4/17.
+ */
+@Configuration
+public class FileUploadConfiguration {
+    /**
+     * 文件上传配置
+     * @return
+     */
+    @Bean
+    public MultipartConfigElement multipartConfigElement() {
+        MultipartConfigFactory factory = new MultipartConfigFactory();
+        //单个文件最大
+        factory.setMaxFileSize("100MB"); //KB,MB
+        /// 设置总上传数据总大小
+        factory.setMaxRequestSize("500MB");
+        return factory.createMultipartConfig();
+    }
+}

+ 5 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/OSSConfiguration.java

@@ -5,6 +5,7 @@ import com.aliyun.oss.OSSClient;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.DefaultAcsClient;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.DefaultProfile;
 import com.aliyuncs.profile.IClientProfile;
 import com.aliyuncs.profile.IClientProfile;
+import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.context.annotation.Configuration;
@@ -14,6 +15,7 @@ import org.springframework.context.annotation.Configuration;
  * @date 2017-03-27.
  * @date 2017-03-27.
  */
  */
 @Configuration
 @Configuration
+@ConditionalOnExpression("${featureSwitch.client.oss}==true")
 public class OSSConfiguration {
 public class OSSConfiguration {
 
 
     @Bean
     @Bean
@@ -24,15 +26,15 @@ public class OSSConfiguration {
 
 
     @Bean
     @Bean
     public DefaultAcsClient getAcsClient(OSSClientConfig config) {
     public DefaultAcsClient getAcsClient(OSSClientConfig config) {
-        IClientProfile profile = DefaultProfile.getProfile(config.getRegion(), config.getAccessId(),
-                config.getAccessKey());
+        IClientProfile profile = DefaultProfile.getProfile(config.getRegion(), config.getAccessKeyId(),
+                config.getAccessKeySecret());
         DefaultAcsClient client = new DefaultAcsClient(profile);
         DefaultAcsClient client = new DefaultAcsClient(profile);
         return client;
         return client;
     }
     }
 
 
     @Bean
     @Bean
     public OSSClient createOSSClient(OSSClientConfig config) {
     public OSSClient createOSSClient(OSSClientConfig config) {
-        OSSClient client = new OSSClient(config.getEndpoint(), config.getAccessId(), config.getAccessKey());
+        OSSClient client = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret());
         return client;
         return client;
     }
     }
 }
 }

+ 1 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RequestLoggerAutoConfiguration.java

@@ -1,7 +1,6 @@
 package cn.iselab.mooctest.site.configure;
 package cn.iselab.mooctest.site.configure;
 
 
 import cn.iselab.mooctest.site.logger.RequestLogger;
 import cn.iselab.mooctest.site.logger.RequestLogger;
-import cn.iselab.mooctest.site.web.constants.FilterConsts;
 import cn.iselab.mooctest.site.web.filter.RequestLoggingFilter;
 import cn.iselab.mooctest.site.web.filter.RequestLoggingFilter;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
@@ -35,7 +34,7 @@ public class RequestLoggerAutoConfiguration {
     @Bean
     @Bean
     public FilterRegistrationBean registrationBean(RequestLoggingFilter requestLoggingFilter) {
     public FilterRegistrationBean registrationBean(RequestLoggingFilter requestLoggingFilter) {
         FilterRegistrationBean bean = new FilterRegistrationBean(requestLoggingFilter);
         FilterRegistrationBean bean = new FilterRegistrationBean(requestLoggingFilter);
-        bean.setOrder(FilterConsts.ORDER_AUTH);
+        bean.setOrder(Integer.MAX_VALUE);
         return bean;
         return bean;
     }
     }
 
 

+ 0 - 41
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RpcServerConfiguration.java

@@ -1,41 +0,0 @@
-package cn.iselab.mooctest.site.configure;
-
-import com.taocoder.ourea.core.config.ThriftServerConfig;
-import com.taocoder.ourea.core.config.ZkConfig;
-import com.taocoder.ourea.core.provider.ServiceProviderFactory;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
-import org.springframework.boot.context.properties.ConfigurationProperties;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-
-/**
- * @auther liuzicong
- */
-@Configuration
-@ConditionalOnProperty(name = "rpcServer.enabled", matchIfMissing = true)
-public class RpcServerConfiguration {
-
-    private Logger LOG = LoggerFactory.getLogger(getClass());
-
-    @Bean(name = "zkConfig")
-    public ZkConfig zkConfig(@Value("${rpcServer.zkAddress}") String zkAddress) {
-        LOG.info("Using zkAddress {}", zkAddress);
-        return new ZkConfig(zkAddress);
-    }
-
-
-    @Bean
-    @ConfigurationProperties(prefix = "rpcServer")
-    public ThriftServerConfig serverConfig() {
-        return new ThriftServerConfig();
-    }
-
-    @Bean
-    public ServiceProviderFactory serviceProviderFactory() {
-        return new ServiceProviderFactory();
-    }
-
-}

+ 7 - 7
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/realm/ShiroRealm.java

@@ -138,9 +138,9 @@ public class ShiroRealm extends AuthorizingRealm {
             CasePermission casePermission = (CasePermission) permission;
             CasePermission casePermission = (CasePermission) permission;
             return checkCasePermission(casePermission);
             return checkCasePermission(casePermission);
         }
         }
-        if (permission instanceof AppPermission) {
-            AppPermission appPermission = (AppPermission) permission;
-            return checkAppPermission(appPermission);
+        if (permission instanceof TargetPermission) {
+            TargetPermission targetPermission = (TargetPermission) permission;
+            return checkAppPermission(targetPermission);
         }
         }
         if (permission instanceof GroupPermission) {
         if (permission instanceof GroupPermission) {
             GroupPermission groupPermission = (GroupPermission) permission;
             GroupPermission groupPermission = (GroupPermission) permission;
@@ -168,10 +168,10 @@ public class ShiroRealm extends AuthorizingRealm {
         return taskPermissions.stream().anyMatch(tp -> tp.implies(taskPermission));
         return taskPermissions.stream().anyMatch(tp -> tp.implies(taskPermission));
     }
     }
 
 
-    private Boolean checkAppPermission(AppPermission appPermission) {
-        List<AppPermission> appPermissions = appPermissionService.getByUserIdAndInstanceId(appPermission.getId(),
-                appPermission.getInstanceId());
-        return appPermissions.stream().anyMatch(ap -> ap.implies(appPermission));
+    private Boolean checkAppPermission(TargetPermission targetPermission) {
+        List<TargetPermission> targetPermissions = appPermissionService.getByUserIdAndInstanceId(targetPermission.getId(),
+                targetPermission.getInstanceId());
+        return targetPermissions.stream().anyMatch(ap -> ap.implies(targetPermission));
     }
     }
 
 
     private Boolean checkCasePermission(CasePermission casePermission) {
     private Boolean checkCasePermission(CasePermission casePermission) {

+ 29 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AddOns2QualificationDao.java

@@ -0,0 +1,29 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.AddOns2Qualification;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.query.Param;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * Created by tangshanshan on 2017/11/7.
+ */
+@Transactional
+public interface AddOns2QualificationDao  extends CrudRepository<AddOns2Qualification, Long> {
+    List<AddOns2Qualification> findByQualificationId(Long qualificationId);
+
+    List<AddOns2Qualification> findByQualificationIdAndAddonsType(Long qualificationId, Integer type);
+
+    @Query("select aq from AddOns2Qualification aq,Qualification q where q.competitionId=:competitionId and aq.qualificationId= q.id")
+    List<AddOns2Qualification> findByCompetitionId(@Param("competitionId")Long competitionId);
+
+    @Query("select count(aq) from AddOns2Qualification aq, User u , Qualification q " +
+            "where u.id=:userId and u.email=aq.email and q.competitionId=:competitionId and q.id=aq.qualificationId and aq.addonsType=:addonsType")
+    int countByUserIdAndCompetitionIdAndType(@Param("userId")Long userId, @Param("competitionId")Long competitionId, @Param("addonsType")Integer addonsType);
+
+    @Query("select q.competitionId from AddOns2Qualification aq,Qualification q where aq.email=:userEmail and aq.qualificationId=q.id")
+    List<Long> findSupervisedCompetitionId(@Param("userEmail")String userEmail);
+}

+ 0 - 18
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AdminDao.java

@@ -1,18 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Admin;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-
-/**
- * @author liuzicong
- */
-@Transactional
-public interface AdminDao extends CrudRepository<Admin, Long> {
-
-    Admin findByEmail(String email);
-
-    Admin findByMobile(String mobile);
-
-}

+ 0 - 21
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AppDao.java

@@ -1,21 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.App;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * @author sean
- * @date 2017-03-11.
- */
-
-@Transactional
-public interface AppDao extends CrudRepository<App, Long>{
-
-    @Query("SELECT app FROM App app WHERE app.ownerId = :ownerId")
-    List<App> findAppsByOwnerId(@Param("ownerId") long ownerId);
-}

+ 3 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AssignedTaskDao.java

@@ -35,4 +35,7 @@ public interface AssignedTaskDao extends PagingAndSortingRepository<AssignedTask
 
 
     @Query("SELECT a.score FROM AssignedTask a WHERE a.taskId = :examId")
     @Query("SELECT a.score FROM AssignedTask a WHERE a.taskId = :examId")
     List<Double> findScoreListByExamId(@Param("examId") Long examId);
     List<Double> findScoreListByExamId(@Param("examId") Long examId);
+
+    List<AssignedTask> findByTaskIdAndScoreGreaterThan(Long taskId, Double score);
+
 }
 }

+ 25 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Case2BugDao.java

@@ -0,0 +1,25 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.fromKibug.Bug;
+import cn.iselab.mooctest.site.web.data.Bug2CaseVO;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * created by zsj in 11:27 2018/2/27
+ **/
+
+@Transactional
+public interface Case2BugDao extends CrudRepository<Bug, Integer> {
+
+    @Query("SELECT COUNT(b) from Bug b")
+    Integer getTotalBugs();
+
+    @Query("SELECT c.id, c.name, COUNT(b.id) FROM CaseExtends c, Bug b, CaseTake ct " +
+            "WHERE b.caseTakeId = ct.id " +
+            "AND ct.caseId = c.id GROUP BY c.id")
+    List<Bug2CaseVO> getBugGroupByCase();
+}

+ 0 - 58
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseDao.java

@@ -1,58 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Case;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.PagingAndSortingRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * Created by sean on 16/12/24.
- */
-@Transactional
-public interface CaseDao extends PagingAndSortingRepository<Case, Long>,JpaSpecificationExecutor<Case> {
-
-    @Query("SELECT c FROM Case c WHERE c.subjectId = :subjectId AND c.deleted = 0")
-    Iterable<Case> findBySubjectId(long subjectId);
-
-    List<Case> findByManagerId(long managerId);
-
-    @Query("SELECT c FROM Case c WHERE c.visible = TRUE AND c.deleted = 0")
-    List<Case> findPublicCases();
-
-    @Query("SELECT c FROM Case c WHERE c.managerId = :managerId AND c.visible = FALSE AND c.deleted = 0")
-    List<Case> findPrivateCasesbyManagerId(@Param("managerId") long managerId);
-
-    @Query("SELECT c FROM Case c WHERE c.subjectId = :subjectId AND c.visible = :visible")
-    List<Case> findBySubjectIdAndPublic(@Param("subjectId") long subjectId, @Param("visible") boolean visible);
-
-    @Query("SELECT c FROM Case c , Subject s " +
-            "WHERE s.id = c.subjectId " +
-            "And s.subsiteId = :subsiteId " +
-            "AND c.caseId = :subsiteCaseId")
-    Case findBySubsiteIdAndSubsiteCaseId(@Param("subsiteId") long subsiteId, @Param("subsiteCaseId") String subsiteCaseId);
-
-    @Query("SELECT c FROM Case c " +
-            "WHERE c.subjectId = :subjectId " +
-            "AND c.visible = :visible " +
-            "AND c.managerId = :managerId")
-    List<Case> findBySubjectIdAndPublicAndUploaderId(@Param("subjectId") long subjectId,
-                                                     @Param("visible") boolean visible,
-                                                     @Param("managerId") Long managerId);
-
-    @Query("SELECT c FROM Case c, Task2Case t2c WHERE c.id = t2c.caseId AND t2c.taskId = :taskId")
-    List<Case> findByTaskId(@Param("taskId") long taskId);
-
-    @Query("SELECT c FROM Case c, Subsite ss, Subject sj " +
-            "WHERE c.managerId = :managerId " +
-            "AND c.subjectId = sj.id " +
-            "AND sj.subsiteId = ss.id " +
-            "AND ss.id = :subsiteId")
-    List<Case> findCasesBySubsiteId(@Param("subsiteId") long subsiteId, @Param("managerId") long managerId);
-
-
-    List<Case> findByCaseId(String id);
-}

+ 4 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseExtendsDao.java

@@ -2,17 +2,18 @@ package cn.iselab.mooctest.site.dao;
 
 
 import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.CaseExtends;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.data.repository.query.Param;
 
 
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
 import java.util.List;
 import java.util.List;
 
 
 /**
 /**
- * Created by shanshan on 2017/6/28.
+ * Created by sean on 16/12/24.
  */
  */
 @Transactional
 @Transactional
-public interface CaseExtendsDao  extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> {
+public interface CaseExtendsDao extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> {
 
 
     List<CaseExtends> findByAppId(long appId);
     List<CaseExtends> findByAppId(long appId);
 }
 }

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2TaskDao.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Competition2Task;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.ArrayList;
+
+/**
+ * Created by tangshanshan on 2017/11/3.
+ */
+@Transactional
+public interface Competition2TaskDao extends CrudRepository<Competition2Task, Long> {
+    Competition2Task findByCompetitionIdAndIsActive(Long competitionId, Boolean isActive);
+    Competition2Task findByCompetitionIdAndIndex(Long competitionId, Integer index);
+    ArrayList<Competition2Task> findByCompetitionIdOrderByIndexDesc(Long competitionId);
+    ArrayList<Competition2Task> findByCompetitionId(Long competitionId);
+    void deleteByCompetitionIdAndIndex(Long competitionId, Integer index);
+}

+ 16 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CompetitionDao.java

@@ -0,0 +1,16 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Competition;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * Created by tangshanshan on 2017/11/3.
+ */
+@Transactional
+public interface CompetitionDao extends CrudRepository<Competition, Long> {
+    List<Competition> findByIsActive(boolean isActive);
+    Competition findById(Long id);
+}

+ 0 - 95
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ContestDao.java

@@ -1,95 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Contest;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * Created by lishuying on 17/3/30.
- */
-@Transactional
-public interface ContestDao extends CrudRepository<Contest, Long> {
-
-    List<Contest> findByYear(String year);
-
-    Contest findByYearAndType(String year, Integer type);
-
-    @Query("SELECT c FROM Contest c WHERE c.id IN " +
-            "(SELECT distinct w2c.contestId FROM Worker2Contest w2c " +
-            "WHERE w2c.workerId=?1)")
-    List<Contest> findByWorkerId(long workerId);
-
-    @Query("SELECT w.location, COUNT(distinct w.id) from Worker w, Worker2Contest w2c " +
-            "WHERE w.id = w2c.workerId " +
-            "GROUP BY w.location ORDER BY COUNT(distinct w.id) DESC")
-    List<Object[]> CountAllByLocation();
-
-    @Query("SELECT w.location, COUNT(distinct w.id) from Worker w, Worker2Contest w2c " +
-            "WHERE w.id = w2c.workerId AND w2c.contestId = :contestId " +
-            "GROUP BY w.location ORDER BY COUNT(distinct w.id) DESC")
-    List<Object[]> CountByLocation(@Param("contestId") Long contestId);
-
-    @Query("SELECT w.information, COUNT(distinct w.id) from Worker w, Worker2Contest w2c " +
-            "WHERE w.id = w2c.workerId " +
-            "GROUP BY w.information ORDER BY COUNT(distinct w.id) DESC")
-    List<Object[]> CountAllBySchool();
-
-    @Query("SELECT w.information, COUNT(distinct w.id) from Worker w, Worker2Contest w2c " +
-            "WHERE w.id = w2c.workerId AND w2c.contestId = :contestId " +
-            "GROUP BY w.information ORDER BY COUNT(distinct w.id) DESC")
-    List<Object[]> CountBySchool(@Param("contestId") Long contestId);
-
-    @Query("SELECT w.location, COUNT(distinct w.id) FROM Worker w, AssignedTask at " +
-            "WHERE at.taskId in (404,414,415,416,421) " +
-            "AND w.id = at.workerId " +
-            "AND at.score != 0 " +
-            "GROUP BY w.location " +
-            "ORDER BY COUNT(distinct w.id) DESC")
-    List<Object[]> CountByActive();
-
-    @Query(value = "SELECT uni_loc FROM university WHERE uni_name = :university", nativeQuery = true)
-    String findAreaByUniversity(@Param("university") String university);
-
-    @Query("SELECT u.school, COUNT(distinct u.id) FROM User u, Group2Worker g2w " +
-            "WHERE u.id = g2w.participantId " +
-            "AND g2w.groupId in(309, 310, 311, 312, 313, 314) " +
-            "GROUP BY u.school ORDER BY COUNT(distinct u.id) DESC")
-    List<Object[]> CountAllBySchoolOfFall();
-
-
-
-    @Query("SELECT u.school, COUNT(distinct u.id) FROM User u, Group2Worker g2w " +
-            "WHERE u.id = g2w.participantId " +
-            "AND g2w.groupId = :groupId " +
-            "GROUP BY u.school ORDER BY COUNT(distinct u.id) DESC")
-    List<Object[]> CountBySchoolOfFall(@Param("groupId") Long groupId);
-
-    @Query("SELECT un.location, COUNT(distinct u.id) FROM User u, AssignedTask at, University un " +
-            "WHERE at.taskId in(953,931,930,915,872) " +
-            "AND u.id = at.participantId " +
-            "AND at.score != 0 " +
-            "AND u.school LIKE un.name " +
-            "GROUP BY un.location " +
-            "ORDER BY COUNT(distinct u.id) DESC")
-    List<Object[]> CountByActiveofFall();
-
-    @Query("SELECT un.location, COUNT(distinct u.id) FROM University un, User u, Group2Worker g2w " +
-            "WHERE u.id = g2w.participantId " +
-            "AND g2w.groupId in(309, 310, 311, 312, 313, 314) " +
-            "AND u.school LIKE un.name " +
-            "GROUP BY un.location " +
-            "ORDER BY COUNT(distinct u.id) DESC")
-    List<Object[]> CountAllByLocationOfFall();
-
-    @Query("SELECT un.location, COUNT(distinct u.id) FROM University un, User u, Group2Worker g2w " +
-            "WHERE u.id = g2w.participantId " +
-            "AND g2w.groupId = :groupId " +
-            "AND u.school LIKE un.name " +
-            "GROUP BY un.location " +
-            "ORDER BY COUNT(distinct u.id) DESC")
-    List<Object[]> CountByLocationOfFall(@Param("groupId") Long groupId);
-}

+ 0 - 38
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ContestMentorDao.java

@@ -1,38 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.ContestMentor;
-import cn.iselab.mooctest.site.models.User;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * Created by shanshan on 2017/8/1.
- */
-@Transactional
-public interface ContestMentorDao extends CrudRepository<ContestMentor, Long> {
-    List<ContestMentor> findByExamIdAndParticipantIdAndRole(Long examId, Long userId, Byte role);
-
-    @Query("SELECT u FROM User u,ContestMentor cm " +
-            "WHERE cm.examId=:examId AND cm.teacherEmail=:email AND cm.participantId=u.id " +
-            "AND (u.name LIKE concat('%',:keyword,'%') or u.email LIKE concat('%',:keyword,'%') or u.mobile LIKE concat('%',:keyword,'%'))")
-    Page<User> findMentorUsers(@Param("examId")Long examId, @Param("email")String email, @Param("keyword")String keyword, Pageable pageable);
-
-    @Query("SELECT count(u.id) from User u, ContestMentor cm where u.id=:userId and u.email=cm.teacherEmail and cm.role=0")
-    Long countByTeacherId(@Param("userId") Long userId);
-
-    @Query("SELECT DISTINCT cm.examId from ContestMentor cm where cm.teacherEmail=:teacherEmail")
-    List<Long> findByMentor(@Param("teacherEmail") String teacherEmail);
-
-    List<ContestMentor> findByExamIdAndTeacherName(Long examId, Long teacherName);
-
-    @Query("SELECT cm FROM ContestMentor cm WHERE cm.examId = :examId " +
-            "AND cm.teacherEmail = :email " +
-            "AND cm.role = 0")
-    List<ContestMentor> findByExamIdAndTeacherEmail(@Param("examId") Long examId, @Param("email") String email);
-}

+ 33 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamDao.java

@@ -1,6 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 package cn.iselab.mooctest.site.dao;
 
 
-import cn.iselab.mooctest.site.models.Task;
+import cn.iselab.mooctest.site.models.Exam;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.jpa.domain.Specifications;
 import org.springframework.data.jpa.domain.Specifications;
@@ -18,28 +18,50 @@ import java.util.List;
  * Created by major on 2017/6/23.
  * Created by major on 2017/6/23.
  */
  */
 @Transactional
 @Transactional
-public interface ExamDao extends PagingAndSortingRepository<Task, Long>, JpaSpecificationExecutor<Task> {
+public interface ExamDao extends PagingAndSortingRepository<Exam, Long>, JpaSpecificationExecutor<Exam> {
 
 
-    Page<Task> findBygroupSet_Id(Long groupId,Pageable pageable);
+    Page<Exam> findBygroupSet_Id(Long groupId, Pageable pageable);
 
 
-    List<Task> findByOwnerId(Long ownerId);
+    List<Exam> findByOwnerId(Long ownerId);
 
 
-    Page<Task> findByOwnerId(long organizerId, Specifications<Task> where, Pageable pageable);
+    Page<Exam> findByOwnerId(long organizerId, Specifications<Exam> where, Pageable pageable);
 
 
     @Modifying
     @Modifying
-    @Query("update Task t set t.status = :status where t.id= :id")
+    @Query("update Exam t set t.status = :status where t.id= :id")
     void updateStatusById(@Param("id") long id, @Param("status") int status);
     void updateStatusById(@Param("id") long id, @Param("status") int status);
 
 
     @Query("select t " +
     @Query("select t " +
-            "from Task t " +
+            "from Exam t " +
             "where t.status in (0, 1)")
             "where t.status in (0, 1)")
-    List<Task> findStatus0And1();
+    List<Exam> findStatus0And1();
 
 
-    List<Task> findAll();
+    List<Exam> findAll();
 
 
-    List<Task> findByName(String name);
+    List<Exam> findByName(String name);
 
 
     @Query("select taskId from Task2Group where groupId in " +
     @Query("select taskId from Task2Group where groupId in " +
-            "(select tg.groupId from Task t, Task2Group tg where t.type=:type and t.id=tg.taskId )")
+            "(select tg.groupId from Exam t, Task2Group tg where t.type=:type and t.id=tg.taskId )")
     List<Long> findContestAndExerciseId(@Param("type")Byte type);
     List<Long> findContestAndExerciseId(@Param("type")Byte type);
+
+
+    @Query("SELECT t FROM Exam t, Task2Group t2g " +
+            "WHERE t2g.groupId = :groupId " +
+            "AND t.id = t2g.taskId")
+    List<Exam> findTaskListByGroupId(@Param("groupId") long groupId);
+
+    @Query("SELECT t FROM Exam t, Task2Group t2g " +
+            "WHERE t2g.groupId = :groupId " +
+            "AND t.id = t2g.taskId")
+    List<Exam> findTaskListInGroup(@Param("groupId") long groupId);
+
+    @Modifying
+    @Query(value = "INSERT INTO AssignedTask" +
+            "(taskId, workerId, managerId, content, name, result, score) " +
+            "VALUES " +
+            "(:taskId, :workerId, :managerId, :content, :name, :result, :score)", nativeQuery = true)
+    void addAssignedTask(@Param("taskId") long taskId, @Param("workerId") long workerId, @Param("managerId") long managerId,
+                         @Param("content") String content, @Param("name") String name, @Param("result") String result,
+                         @Param("score") double score);
+
+    int countByManagerId(long managerId);
 }
 }

+ 1 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Group2WorkerDao.java

@@ -26,4 +26,5 @@ public interface Group2WorkerDao extends CrudRepository<Group2Worker, Long>,Pagi
     List<Group2Worker> findByGroupId(long id);
     List<Group2Worker> findByGroupId(long id);
 
 
     List<Group2Worker> findByParticipantId(long participantId);
     List<Group2Worker> findByParticipantId(long participantId);
+
 }
 }

+ 0 - 37
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java

@@ -2,7 +2,6 @@ package cn.iselab.mooctest.site.dao;
 
 
 import cn.iselab.mooctest.site.models.Group;
 import cn.iselab.mooctest.site.models.Group;
 import cn.iselab.mooctest.site.models.User;
 import cn.iselab.mooctest.site.models.User;
-import cn.iselab.mooctest.site.models.Worker;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
 import org.springframework.data.domain.Sort;
@@ -22,8 +21,6 @@ import java.util.List;
 @Transactional
 @Transactional
 public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
 public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
 
 
-//    Page<Worker> GroupMemeberList(long groupId, Pageable pageable);
-
     List<Group> findByManagerId(long managerId);
     List<Group> findByManagerId(long managerId);
     List<Group> findByOwnerId(long ownerId);
     List<Group> findByOwnerId(long ownerId);
 
 
@@ -78,45 +75,11 @@ public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
             "AND g2w.workerId = :participantId ")
             "AND g2w.workerId = :participantId ")
     List<Group> findByExamIdAndParticipantId(@Param("examId") long examId, @Param("participantId") long participantId);
     List<Group> findByExamIdAndParticipantId(@Param("examId") long examId, @Param("participantId") long participantId);
 
 
-    @Query("SELECT w " +
-            "FROM Worker w " +
-            "WHERE w.id IN( " +
-            " SELECT g2w.workerId " +
-            " FROM Group2Worker g2w " +
-            " WHERE g2w.groupId=:groupId)")
-    Page<Worker> getWorkersByGroupId(@Param("groupId") long groupId, Pageable pageable);
 
 
     @Query("SELECT u FROM User u WHERE u.id IN(" +
     @Query("SELECT u FROM User u WHERE u.id IN(" +
             "SELECT g2w.participantId FROM Group2Worker g2w WHERE g2w.groupId=:groupId)")
             "SELECT g2w.participantId FROM Group2Worker g2w WHERE g2w.groupId=:groupId)")
     List<User> getUserByGroupId(@Param("groupId") long groupId);
     List<User> getUserByGroupId(@Param("groupId") long groupId);
 
 
-    @Query("SELECT w " +
-            "FROM Worker w " +
-            "WHERE w.id IN( " +
-            " SELECT g2w.workerId " +
-            " FROM Group2Worker g2w " +
-            " WHERE g2w.groupId=:groupId)")
-    List<Worker> getWorkersByGroupId(@Param("groupId") long groupId);
-
-    @Query("SELECT w " +
-            "FROM Group2Worker g2w, Worker w " +
-            "WHERE g2w.groupId=:groupId " +
-            "AND w.id=g2w.workerId " +
-            "AND w.name like '%:name%'")
-    List<Worker> findWorker(@Param("groupId") long groupId, @Param("name") String name);
-
-    /**
-     * Check if worker exists in certain group
-     *
-     * @param groupId
-     * @param workerId
-     * @return
-     */
-    @Query("SELECT w FROM Worker w, Group2Worker g2w " +
-            "WHERE g2w.groupId= :groupId " +
-            "AND g2w.workerId= :workerId " +
-            "AND w.id = g2w.workerId")
-    Worker findWorkerInGroup(@Param("groupId") long groupId, @Param("workerId") long workerId);
     @Query("SELECT u " +
     @Query("SELECT u " +
             "FROM User u " +
             "FROM User u " +
             "WHERE u.id IN( " +
             "WHERE u.id IN( " +

+ 0 - 39
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerDao.java

@@ -1,39 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Manager;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.PagingAndSortingRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-
-/**
- * Created by sean on 16/12/22.
- */
-@Transactional
-public interface ManagerDao extends PagingAndSortingRepository<Manager, Long> {
-
-    Manager findByName(String name);
-
-    Manager findById(long id);
-
-    Manager findByMobile(String mobile);
-
-    Manager findByEmail(String email);
-
-    @Query("SELECT m FROM Manager m WHERE m.email = :account OR m.mobile = :account")
-    Manager findByAccount(@Param("account") String account);
-
-//    @Modifying
-//    @Query("UPDATE Task2AssistantManagerService t2am " +
-//            "SET t2am.status = :status " +
-//            "WHERE t2am.managerId = :managerId " +
-//            "AND t2am.taskId = :taskId")
-//    Manager updateAssistantManager(@Param("managerId") long managerId,
-//                                   @Param("taskId") long taskId, @Param("status") int status);
-
-    @Query("SELECT COUNT(g) FROM Group g WHERE g.managerId = :managerId")
-    int currGroupNum(@Param("managerId") long managerId);
-
-}

+ 0 - 18
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerSubsiteFeatureDao.java

@@ -1,18 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.ManagerSubsiteFeature;
-import cn.iselab.mooctest.site.models.MobileVerification;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * @author guoyc
- * @date 2017-03-27 4:15 PM.
- */
-@Transactional
-public interface ManagerSubsiteFeatureDao extends CrudRepository<ManagerSubsiteFeature, Long> {
-
-    List<ManagerSubsiteFeature> findByManagerId(long managerId);
-}

+ 51 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/MonitorDao.java

@@ -0,0 +1,51 @@
+package cn.iselab.mooctest.site.dao;
+
+
+import cn.iselab.mooctest.site.models.User;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+import javax.transaction.Transactional;
+
+/**
+ * Created by zsj on 2018/2/23.
+ */
+
+@Transactional
+public interface MonitorDao extends CrudRepository<User, Long>{
+
+    @Query("SELECT COUNT(u) FROM User u")
+    Integer getTotalUser();
+
+    @Query("SELECT COUNT(DISTINCT u2r.userId) FROM User2Role u2r, User u WHERE u2r.roleId = 1 AND u2r.userId = u.id")
+    Integer getAdminNumbers();
+
+    @Query("SELECT COUNT(DISTINCT u2r.userId) FROM User2Role u2r, User u WHERE u2r.roleId = 2 AND u2r.userId = u.id")
+    Integer getTeacherNumbers();
+
+    @Query("SELECT COUNT(DISTINCT u2r.userId) FROM User2Role u2r, User u WHERE u2r.roleId = 3 AND u2r.userId = u.id")
+    Integer getStudentNumbers();
+
+    @Query("SELECT COUNT(DISTINCT u2r.userId) FROM User2Role u2r, User u WHERE u2r.roleId = 4 AND u2r.userId = u.id")
+    Integer getContestMentorNumbers();
+
+    @Query("SELECT COUNT(t) FROM Exam t")
+    Integer getTotalExam();
+
+    @Query("SELECT COUNT(t) FROM Exam t WHERE t.status = 0 AND t.beginTime < t.endTime")
+    Integer getUpComingExam();
+
+    @Query("SELECT COUNT(t) FROM Exam t WHERE t.status = 1 AND t.beginTime < t.endTime")
+    Integer getOnGoingExam();
+
+    @Query("SELECT COUNT(t) FROM Exam t WHERE (t.status = 2 OR t.status = 3 )AND t.beginTime < t.endTime")
+    Integer getFinishedExam();
+
+    @Query("SELECT COUNT(c) FROM CaseExtends c WHERE c.deleted = false")
+    Integer getTotalCases();
+
+    @Query("SELECT COUNT(c) FROM CaseExtends c WHERE c.deleted = false AND c.visible = true ")
+    Integer getPublicCaseNumbers();
+
+    @Query("SELECT COUNT(c) FROM CaseExtends c WHERE c.deleted = false AND c.visible = false ")
+    Integer getPersonalCaseNumbers();
+}

+ 6 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Task2CaseDao.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Paper2CaseDao.java

@@ -1,6 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 package cn.iselab.mooctest.site.dao;
 
 
-import cn.iselab.mooctest.site.models.Task2Case;
+import cn.iselab.mooctest.site.models.Paper2Case;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.query.Param;
 import org.springframework.data.repository.query.Param;
@@ -13,14 +13,14 @@ import java.util.List;
  * @date 2017-03-08.
  * @date 2017-03-08.
  */
  */
 @Transactional
 @Transactional
-public interface Task2CaseDao extends CrudRepository<Task2Case, Long> {
+public interface Paper2CaseDao extends CrudRepository<Paper2Case, Long> {
 
 
-    Task2Case findByTaskIdAndCaseId(long taskId, long caseId);
+    Paper2Case findByTaskIdAndCaseId(long taskId, long caseId);
 
 
-    List<Task2Case> findByTaskId(long taskId);
+    List<Paper2Case> findByTaskId(long taskId);
 
 
-    @Query("SELECT MAX(t2c.caseIndex) FROM Task2Case t2c WHERE t2c.taskId = :taskId")
+    @Query("SELECT MAX(t2c.caseIndex) FROM Paper2Case t2c WHERE t2c.taskId = :taskId")
     Integer findMaxCaseIndexByTaskId(@Param("taskId") long taskId);
     Integer findMaxCaseIndexByTaskId(@Param("taskId") long taskId);
 
 
-    List<Task2Case> findByCaseId(long caseId);
+    List<Paper2Case> findByCaseId(long caseId);
 }
 }

+ 2 - 3
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java

@@ -1,6 +1,5 @@
 package cn.iselab.mooctest.site.dao;
 package cn.iselab.mooctest.site.dao;
 
 
-import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.Paper;
 import cn.iselab.mooctest.site.models.Paper;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
@@ -20,10 +19,10 @@ public interface PaperDao extends PagingAndSortingRepository<Paper, Long>, JpaSp
 
 
     Paper findById(long paperId);
     Paper findById(long paperId);
 
 
-    @Query("select p from Paper p,Task2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0 and p.isPublic=1")
+    @Query("select p from Paper p,Paper2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0 and p.isPublic=1")
     Page<Paper> findByCaseId(@Param("caseId") Long caseId, Pageable pageable);
     Page<Paper> findByCaseId(@Param("caseId") Long caseId, Pageable pageable);
 
 
-    @Query("select p from Paper p,Task2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0 and p.isPublic=0 " +
+    @Query("select p from Paper p,Paper2Case t2c where t2c.caseId=:caseId and t2c.taskId=p.id and p.isDeleted=0 and p.isPublic=0 " +
             "and p.ownerId=:ownerId")
             "and p.ownerId=:ownerId")
     Page<Paper> findByCaseIdPrivate(@Param("caseId") Long caseId,
     Page<Paper> findByCaseIdPrivate(@Param("caseId") Long caseId,
                                     @Param("ownerId") Long ownerId, Pageable pageable);
                                     @Param("ownerId") Long ownerId, Pageable pageable);

+ 18 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/QualificationDao.java

@@ -0,0 +1,18 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.Qualification;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * Created by tangshanshan on 2017/11/6.
+ */
+@Transactional
+public interface QualificationDao extends CrudRepository<Qualification, Long> {
+    Qualification findByCompetitionIdAndUserId(Long competitionId, Long userId);
+    List<Qualification> findByCompetitionIdAndStatus(Long competitionId, Integer status);
+    Qualification findByCompetitionIdAndUserIdAndStatus(Long competitionId, Long userId, Integer status);
+    List<Qualification> findByCompetitionIdAndStatusAndNextRound(Long competitionId, Integer status, boolean nextround);
+}

+ 6 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteDao.java

@@ -1,6 +1,6 @@
 package cn.iselab.mooctest.site.dao;
 package cn.iselab.mooctest.site.dao;
 
 
-import cn.iselab.mooctest.site.models.Case;
+import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.Subsite;
 import cn.iselab.mooctest.site.models.Subsite;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.CrudRepository;
@@ -19,19 +19,19 @@ public interface SubsiteDao extends CrudRepository<Subsite, Long> {
 
 
     Subsite findByName(String name);
     Subsite findByName(String name);
 
 
-    @Query("SELECT c FROM Case c, Subject s " +
+    @Query("SELECT c FROM CaseExtends c, Subject s " +
             "WHERE s.subsiteId = :subsiteId " +
             "WHERE s.subsiteId = :subsiteId " +
             "AND c.subjectId = s.id " +
             "AND c.subjectId = s.id " +
             "AND c.visible = true " +
             "AND c.visible = true " +
             "AND c.deleted = false")
             "AND c.deleted = false")
-    List<Case> getPublicCasesBySubsiteId(@Param("subsiteId") long subsiteId);
+    List<CaseExtends> getPublicCasesBySubsiteId(@Param("subsiteId") long subsiteId);
 
 
-    @Query("SELECT c FROM Case c, Subject s " +
+    @Query("SELECT c FROM CaseExtends c, Subject s " +
             "WHERE s.subsiteId = :subsiteId " +
             "WHERE s.subsiteId = :subsiteId " +
             "AND c.subjectId = s.id " +
             "AND c.subjectId = s.id " +
             "AND c.managerId = :managerId " +
             "AND c.managerId = :managerId " +
             "AND c.visible = false " +
             "AND c.visible = false " +
             "AND c.deleted = false")
             "AND c.deleted = false")
-    List<Case> getPrivateCasesBySubsiteIdAndManagerId(@Param("subsiteId") long subsiteId,
-                                                      @Param("managerId") long managerId);
+    List<CaseExtends> getPrivateCasesBySubsiteIdAndManagerId(@Param("subsiteId") long subsiteId,
+                                                             @Param("managerId") long managerId);
 }
 }

+ 0 - 15
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteFeatureDao.java

@@ -1,15 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.SubsiteFeature;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-
-/**
- * @author guoyc
- * @date 2017-03-30 3:46 PM.
- */
-@Transactional
-public interface SubsiteFeatureDao extends CrudRepository<SubsiteFeature, Long>{
-
-}

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/App2UserDao.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Target2UserDao.java

@@ -1,10 +1,10 @@
 package cn.iselab.mooctest.site.dao;
 package cn.iselab.mooctest.site.dao;
 
 
-import cn.iselab.mooctest.site.models.App2User;
+import cn.iselab.mooctest.site.models.Target2User;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;
 
 
-public interface App2UserDao extends PagingAndSortingRepository<App2User,Long>, JpaSpecificationExecutor<App2User>, CrudRepository<App2User,Long> {
+public interface Target2UserDao extends PagingAndSortingRepository<Target2User,Long>, JpaSpecificationExecutor<Target2User>, CrudRepository<Target2User,Long> {
 
 
 }
 }

+ 8 - 7
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDao.java

@@ -1,12 +1,9 @@
 package cn.iselab.mooctest.site.dao;
 package cn.iselab.mooctest.site.dao;
 
 
 
 
-import cn.iselab.mooctest.site.models.App;
-import cn.iselab.mooctest.site.web.data.TargetVO;
+import cn.iselab.mooctest.site.models.Target;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.domain.Specifications;
-import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
 import org.springframework.data.repository.CrudRepository;
@@ -14,13 +11,17 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.query.Param;
 import org.springframework.data.repository.query.Param;
 
 
 import javax.transaction.Transactional;
 import javax.transaction.Transactional;
+import java.util.List;
 
 
 /**
 /**
  * Created by ROGK on 2017/6/26.
  * Created by ROGK on 2017/6/26.
  */
  */
 @Transactional
 @Transactional
-public interface TargetDao extends PagingAndSortingRepository<App,Long>, JpaSpecificationExecutor<App>, CrudRepository<App,Long> {
+public interface TargetDao extends PagingAndSortingRepository<Target,Long>, JpaSpecificationExecutor<Target>, CrudRepository<Target,Long> {
 
 
-    @Query("SELECT a from App a WHERE a.ownerId=:ownerId OR a.visible= 1")
-    Page<App> findByOwnerId(@Param("ownerId")long ownerId, Pageable pageable);
+    @Query("SELECT a from Target a WHERE a.ownerId=:ownerId OR a.visible= 1")
+    Page<Target> findByOwnerId(@Param("ownerId")long ownerId, Pageable pageable);
+
+    @Query("SELECT app FROM Target app WHERE app.ownerId = :ownerId")
+    List<Target> findAppsByOwnerId(@Param("ownerId") long ownerId);
 }
 }

+ 0 - 18
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDevDao.java

@@ -1,18 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.DevTarget;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-
-/**
- * Created by ROGK on 2017/7/18.
- */
-@Transactional
-public interface TargetDevDao extends CrudRepository<DevTarget,Long>{
-
-    @Query("SELECT a FROM DevTarget a WHERE a.uploadedCaseId=:uploadCaseId")
-    DevTarget findByUploadedCaseId(@Param("uploadCaseId") long uploadCaseId);
-}

+ 10 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetExtendsDao.java

@@ -0,0 +1,10 @@
+package cn.iselab.mooctest.site.dao;
+
+import cn.iselab.mooctest.site.models.TargetExtends;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+
+public interface TargetExtendsDao extends CrudRepository<TargetExtends, Long> {
+    List<TargetExtends> findByTargetId(Long targetId);
+}

+ 0 - 15
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetWebDao.java

@@ -1,15 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.WebTarget;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-
-/**
- * Created by ROGK on 2017/9/4.
- */
-@Transactional
-public interface TargetWebDao extends CrudRepository<WebTarget,Long>{
-
-    WebTarget findBySuperId(long superId);
-}

+ 0 - 58
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TaskDao.java

@@ -1,58 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Task;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * Created by Liu on 2016/12/27.
- */
-@Transactional
-public interface TaskDao extends CrudRepository<Task, Long> {
-
-    List<Task> findByManagerId(long managerId);
-
-    @Query("SELECT t " +
-            "FROM Task t " +
-            "WHERE t.id IN( " +
-            " SELECT at.taskId " +
-            " FROM AssignedTask at " +
-            " WHERE at.workerId=:workerId)")
-    List<Task> findByWorkerId(@Param("workerId") long workerId);
-
-    @Query("SELECT t FROM Task t, Task2Group t2g " +
-            "WHERE t2g.groupId = :groupId " +
-            "AND t.id = t2g.taskId")
-    List<Task> findTaskListByGroupId(@Param("groupId") long groupId);
-
-    @Query("SELECT t FROM Task t, Task2Group t2g " +
-            "WHERE t2g.groupId = :groupId " +
-            "AND t.id = t2g.taskId")
-    List<Task> findTaskListInGroup(@Param("groupId") long groupId);
-
-    @Modifying
-    @Query(value = "INSERT INTO AssignedTask" +
-            "(taskId, workerId, managerId, content, name, result, score) " +
-            "VALUES " +
-            "(:taskId, :workerId, :managerId, :content, :name, :result, :score)", nativeQuery = true)
-    void addAssignedTask(@Param("taskId") long taskId, @Param("workerId") long workerId, @Param("managerId") long managerId,
-                         @Param("content") String content, @Param("name") String name, @Param("result") String result,
-                         @Param("score") double score);
-
-    @Query("SELECT COUNT(t) FROM Task t WHERE t.beginTime > NOW()")
-    int getUpComingTaskCount();
-
-    @Query("SELECT COUNT(t) FROM Task t WHERE t.beginTime < NOW() AND t.endTime >NOW()")
-    int getOnGoingTaskCount();
-
-    @Query("SELECT COUNT(t) FROM Task t WHERE t.endTime < NOW()")
-    int getFinishedTaskCount();
-
-    int countByManagerId(long managerId);
-
-}

+ 4 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/WeightGeneralDao.java

@@ -3,6 +3,8 @@ package cn.iselab.mooctest.site.dao;
 import cn.iselab.mooctest.site.models.WeightGeneral;
 import cn.iselab.mooctest.site.models.WeightGeneral;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaRepository;
 
 
+import java.util.List;
+
 /**
 /**
  * weight general dao
  * weight general dao
  *
  *
@@ -13,4 +15,6 @@ public interface WeightGeneralDao extends JpaRepository<WeightGeneral,Long> {
 
 
   WeightGeneral findByTaskIdAndCaseIdAndType(long taskId, long caseId, String type);
   WeightGeneral findByTaskIdAndCaseIdAndType(long taskId, long caseId, String type);
 
 
+  List<WeightGeneral> findByTaskIdAndCaseId(long taskId, long caseId);
+
 }
 }

+ 0 - 18
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Worker2ContestDao.java

@@ -1,18 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Worker2Contest;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-import java.util.*;
-
-/**
- * Created by lishuying on 17/3/30.
- */
-@Transactional
-public interface Worker2ContestDao extends CrudRepository<Worker2Contest, Long> {
-
-    List<Worker2Contest> findByWorkerId(long workerId);
-
-
-}

+ 0 - 61
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/WorkerDao.java

@@ -1,61 +0,0 @@
-package cn.iselab.mooctest.site.dao;
-
-import cn.iselab.mooctest.site.models.Worker;
-import org.springframework.data.jpa.repository.Modifying;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.PagingAndSortingRepository;
-import org.springframework.data.repository.query.Param;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-
-/**
- * Created by sean on 16/12/22.
- */
-public interface WorkerDao extends PagingAndSortingRepository<Worker, Long> {
-
-    Worker findByEmail(String email);
-
-    Worker findByMobile(String mobile);
-
-    List<Worker> findByName(@Param("name") String name);
-
-    @Query("SELECT w FROM Worker w WHERE w.email = :account OR w.mobile = :account")
-    Worker findByAccount(@Param("account") String account);
-
-    @Query("SELECT w FROM Worker w WHERE w.email = :email OR w.mobile = :mobile")
-    Worker findByAccount(@Param("email") String email, @Param("mobile") String mobile);
-
-    /**
-     * get workerList of certain group order by workerId desc
-     *
-     * @param groupId
-     * @return
-     */
-    @Query("SELECT w " +
-            "FROM Worker w " +
-            "WHERE w.id in " +
-            "(SELECT g2w.workerId " +
-            "FROM Group2Worker g2w " +
-            "WHERE g2w.groupId=:groupId )" +
-            "ORDER BY w.id DESC")
-    List<Worker> getWorkerListSortByDesc(long groupId);
-
-    @Query("SELECT w FROM Worker w, Group2Worker g2w " +
-            "WHERE g2w.groupId = :groupId " +
-            "AND w.id = g2w.workerId ")
-    List<Worker> getWorkerList(@Param("groupId") long groupId);
-
-    @Modifying
-    @Transactional
-    @Query(value = "INSERT INTO group_2_worker (worker_id, group_id) VALUES(:workerId, :groupId)", nativeQuery = true)
-    void joinGroup(@Param("workerId") long workerId, @Param("groupId") long groupId);
-
-    @Transactional
-    @Query(value = "SELECT * " +
-            "FROM worker w " +
-            "WHERE w.id in " +
-            "(SELECT distinct w2c.worker_id " +
-            "FROM worker_2_contest w2c)", nativeQuery = true)
-    List<Worker> getContestWorkerList();
-}

+ 0 - 10
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/custom/GenericUserDao.java

@@ -1,10 +0,0 @@
-package cn.iselab.mooctest.site.dao.custom;
-
-import org.springframework.stereotype.Repository;
-
-/**
- * Created by Liu on 2016/12/27.
- */
-@Repository
-public class GenericUserDao {
-}

+ 0 - 82
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/custom/UserDao.java

@@ -1,82 +0,0 @@
-package cn.iselab.mooctest.site.dao.custom;
-
-import cn.iselab.mooctest.site.common.enums.UserType;
-import cn.iselab.mooctest.site.dao.AdminDao;
-import cn.iselab.mooctest.site.dao.ManagerDao;
-import cn.iselab.mooctest.site.dao.WorkerDao;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.stereotype.Repository;
-
-/**
- * Created by Liu on 2016/12/27.
- */
-@Repository
-public class UserDao {
-
-    @Autowired
-    private ManagerDao managerDao;
-    @Autowired
-    private WorkerDao workerDao;
-    @Autowired
-    private AdminDao adminDao;
-
-    public Object searchByEmail(String email, UserType type){
-        switch(type){
-            case ALL:
-                return searchByEmail(email);
-            case MANAGER:
-                return managerDao.findByEmail(email);
-            case WORKER:
-                return workerDao.findByEmail(email);
-            case ADMIN:
-                return adminDao.findByEmail(email);
-            default:
-                return null;
-        }
-    }
-
-    public Object searchByEmail(String email){
-        // The search sequence is manager -> worker -> admin
-        Object user = managerDao.findByEmail(email);
-        if (user != null){
-            return user;
-        }
-        user = workerDao.findByEmail(email);
-        if (user != null){
-            return user;
-        }
-
-        return adminDao.findByEmail(email);
-    }
-
-    public Object searchByMobile(String mobile, UserType type){
-        switch(type){
-            case ALL:
-                return searchByMobile(mobile);
-            case MANAGER:
-                return managerDao.findByMobile(mobile);
-            case WORKER:
-                return workerDao.findByMobile(mobile);
-            case ADMIN:
-                return adminDao.findByMobile(mobile);
-            default:
-                return null;
-        }
-    }
-
-    public Object searchByMobile(String mobile){
-        Object user = managerDao.findByMobile(mobile);
-        if (user != null){
-            return user;
-        }
-        user = workerDao.findByMobile(mobile);
-        if (user != null){
-            return user;
-        }
-
-        return adminDao.findByMobile(mobile);
-    }
-
-
-
-}

+ 0 - 11
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/AppStatisDao.java

@@ -1,11 +0,0 @@
-package cn.iselab.mooctest.site.dao.fromKibug;
-
-
-import cn.iselab.mooctest.site.models.fromKibug.AppStatis;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-
-@Transactional
-public interface AppStatisDao  extends CrudRepository<AppStatis, Long> {
-}

+ 0 - 22
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ApplicationDao.java

@@ -1,22 +0,0 @@
-package cn.iselab.mooctest.site.dao.fromKibug;
-
-import cn.iselab.mooctest.site.models.fromKibug.Application;
-import cn.iselab.mooctest.site.models.fromKibug.ManagerScore;
-import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.PagingAndSortingRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-
-@Transactional
-public interface ApplicationDao extends PagingAndSortingRepository<Application, Long>,JpaSpecificationExecutor<Application>,CrudRepository<Application, Long> {
-
-    @Query("SELECT application FROM Application application WHERE application.uploadedCaseId= :uploaderCaseId")
-    Application getApplicationByUploadedCaseId(@Param("uploaderCaseId") long uploaderCaseId);
-
-   List<Application> getAppsByUploadedCaseId(long uploaderCaseId);
-}

+ 0 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/BugDao.java

@@ -1,6 +1,5 @@
 package cn.iselab.mooctest.site.dao.fromKibug;
 package cn.iselab.mooctest.site.dao.fromKibug;
 
 
-import cn.iselab.mooctest.site.models.fromKibug.Application;
 import cn.iselab.mooctest.site.models.fromKibug.Bug;
 import cn.iselab.mooctest.site.models.fromKibug.Bug;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.PagingAndSortingRepository;

+ 0 - 22
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/MobileClientDao.java

@@ -1,22 +0,0 @@
-package cn.iselab.mooctest.site.dao.fromKibug;
-
-import cn.iselab.mooctest.site.models.Case;
-import cn.iselab.mooctest.site.models.fromKibug.IncrementId;
-import cn.iselab.mooctest.site.models.fromKibug.MobileClient;
-import org.springframework.data.domain.Page;
-import org.springframework.data.domain.Pageable;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.CrudRepository;
-import org.springframework.data.repository.query.Param;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * Created by NJUta on 2017/6/1.
- */
-@Transactional
-public interface MobileClientDao  extends CrudRepository<MobileClient, Long> {
-    @Query("SELECT m FROM MobileClient m WHERE m.platform = :platform order by version desc")
-    Page<MobileClient> getLastestMobileClient(@Param("platform") short platform, Pageable page);
-}

+ 0 - 19
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/AppPermissionDao.java

@@ -1,19 +0,0 @@
-package cn.iselab.mooctest.site.dao.instancePermission;
-
-import cn.iselab.mooctest.site.models.instancePermission.AppPermission;
-import org.springframework.data.repository.CrudRepository;
-
-import javax.transaction.Transactional;
-import java.util.List;
-
-/**
- * @author sean
- * @date 2017-07-12.
- */
-@Transactional
-public interface AppPermissionDao extends CrudRepository<AppPermission, Long> {
-
-    List<AppPermission> findByUserId(Long userId);
-
-    List<AppPermission> findByUserIdAndInstanceId(Long userId, Long instanceId);
-}

+ 19 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/TargetPermissionDao.java

@@ -0,0 +1,19 @@
+package cn.iselab.mooctest.site.dao.instancePermission;
+
+import cn.iselab.mooctest.site.models.instancePermission.TargetPermission;
+import org.springframework.data.repository.CrudRepository;
+
+import javax.transaction.Transactional;
+import java.util.List;
+
+/**
+ * @author sean
+ * @date 2017-07-12.
+ */
+@Transactional
+public interface TargetPermissionDao extends CrudRepository<TargetPermission, Long> {
+
+    List<TargetPermission> findByUserId(Long userId);
+
+    List<TargetPermission> findByUserIdAndInstanceId(Long userId, Long instanceId);
+}

+ 0 - 56
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/AuthResult.java

@@ -1,56 +0,0 @@
-package cn.iselab.mooctest.site.data;
-
-import cn.iselab.mooctest.site.web.cookie.persistent.PersistentCookie;
-import cn.iselab.mooctest.site.web.cookie.session.SessionCookie;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @author sean
- * @date 2017-03-19.
- */
-public class AuthResult {
-
-    private boolean success = false;
-
-    private List<String> cookiesToRemove = new ArrayList<>();
-
-    private Map<String, PersistentCookie> persistentCookiesToAdd = new HashMap<>();
-
-    private Map<String, SessionCookie> sessionCookiesToAdd = new HashMap<>();
-
-    public boolean isSuccess() {
-        return success;
-    }
-
-    public void setSuccess(boolean success) {
-        this.success = success;
-    }
-
-    public List<String> getCookiesToRemove() {
-        return cookiesToRemove;
-    }
-
-    public void setCookiesToRemove(List<String> cookiesToRemove) {
-        this.cookiesToRemove = cookiesToRemove;
-    }
-
-    public Map<String, PersistentCookie> getPersistentCookiesToAdd() {
-        return persistentCookiesToAdd;
-    }
-
-    public void setPersistentCookiesToAdd(Map<String, PersistentCookie> persistentCookiesToAdd) {
-        this.persistentCookiesToAdd = persistentCookiesToAdd;
-    }
-
-    public Map<String, SessionCookie> getSessionCookiesToAdd() {
-        return sessionCookiesToAdd;
-    }
-
-    public void setSessionCookiesToAdd(Map<String, SessionCookie> sessionCookiesToAdd) {
-        this.sessionCookiesToAdd = sessionCookiesToAdd;
-    }
-}

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/forInternalUse/GeneralGradeDTO.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/GeneralGradeDTO.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.site.web.data.forInternalUse;
+package cn.iselab.mooctest.site.data;
 
 
 import cn.iselab.mooctest.site.models.GradeGeneral;
 import cn.iselab.mooctest.site.models.GradeGeneral;
 import lombok.AllArgsConstructor;
 import lombok.AllArgsConstructor;

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/web/data/forInternalUse/NodeExtends.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/NodeExtends.java

@@ -1,4 +1,4 @@
-package cn.iselab.mooctest.site.web.data.forInternalUse;
+package cn.iselab.mooctest.site.data;
 
 
 import lombok.Data;
 import lombok.Data;
 
 

+ 1 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/PageData.java

@@ -36,7 +36,7 @@ public class PageData<T> {
         this.setLast(activePage == this.getTotalPages());
         this.setLast(activePage == this.getTotalPages());
     }
     }
     public <S> PageData<S> map(Converter<? super T, ? extends S> converter) {
     public <S> PageData<S> map(Converter<? super T, ? extends S> converter) {
-        PageData pageData = cn.iselab.mooctest.site.web.util.Converter.convert(PageData.class, this);
+        PageData pageData = cn.iselab.mooctest.site.util.data.Converter.convert(PageData.class, this);
         pageData.setContent(this.getConvertedContent(converter));
         pageData.setContent(this.getConvertedContent(converter));
         return pageData;
         return pageData;
     }
     }

+ 10 - 10
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/config/OSSClientConfig.java

@@ -7,8 +7,8 @@ package cn.iselab.mooctest.site.data.config;
 public class OSSClientConfig {
 public class OSSClientConfig {
 
 
     private String endpoint;
     private String endpoint;
-    private String accessId;
-    private String accessKey;
+    private String accessKeyId;
+    private String accessKeySecret;
     private String bucket;
     private String bucket;
     private long expireTime;
     private long expireTime;
     private String roleArn;
     private String roleArn;
@@ -54,20 +54,20 @@ public class OSSClientConfig {
         this.endpoint = endpoint;
         this.endpoint = endpoint;
     }
     }
 
 
-    public String getAccessId() {
-        return accessId;
+    public String getAccessKeyId() {
+        return accessKeyId;
     }
     }
 
 
-    public void setAccessId(String accessId) {
-        this.accessId = accessId;
+    public void setAccessKeyId(String accessKeyId) {
+        this.accessKeyId = accessKeyId;
     }
     }
 
 
-    public String getAccessKey() {
-        return accessKey;
+    public String getAccessKeySecret() {
+        return accessKeySecret;
     }
     }
 
 
-    public void setAccessKey(String accessKey) {
-        this.accessKey = accessKey;
+    public void setAccessKeySecret(String accessKeySecret) {
+        this.accessKeySecret = accessKeySecret;
     }
     }
 }
 }
 
 

+ 31 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/AddOns2Qualification.java

@@ -0,0 +1,31 @@
+package cn.iselab.mooctest.site.models;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+/**
+ *
+ * @author csc
+ * @date 2017/11/1
+ */
+
+@Data
+@Entity
+@Table(name = "add_ons_2_qualification")
+public class AddOns2Qualification {
+    public static final Integer ADDONS_TYPE_TEACHER=0;
+    public static final Integer ADDONS_TYPE_MEMBER=1;
+
+    @Id
+    @GeneratedValue
+    private Long id;
+    @Column(name="qualification_id")
+    private Long qualificationId;
+    @Column(name="name")
+    private String name;
+    @Column(name="email")
+    private String email;
+    @Column(name="add_ons_type")
+    private Integer addonsType;
+}

+ 0 - 67
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Admin.java

@@ -1,67 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by sean on 16/12/19.
- */
-@Entity
-@Table(name = "admin")
-public class Admin {
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "email")
-    private String email;
-
-    @Column(name = "mobile")
-    private String mobile;
-
-    @Column(name = "name")
-    private String name;
-
-    @Column(name = "password")
-    private String password;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getEmail() {
-        return email;
-    }
-
-    public void setEmail(String email) {
-        this.email = email;
-    }
-
-    public String getMobile() {
-        return mobile;
-    }
-
-    public void setMobile(String mobile) {
-        this.mobile = mobile;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getPassword() {
-        return password;
-    }
-
-    public void setPassword(String password) {
-        this.password = password;
-    }
-}
-

+ 0 - 196
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Case.java

@@ -1,196 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import lombok.EqualsAndHashCode;
-
-import javax.persistence.*;
-import java.sql.Timestamp;
-
-/**
- * Created by sean on 16/12/19.
- */
-
-@EqualsAndHashCode(exclude = "createTime")
-@Entity
-@Inheritance(strategy = InheritanceType.JOINED)
-@Table(name = "case_entity")
-public class Case {
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "name")
-    private String name;
-
-    @Column(name = "content")
-    private String content;
-
-    @Column(name = "domain")
-    private Integer domain;
-
-    @Column(name = "difficulty")
-    private Integer difficulty;
-
-    @Column(name = "description")
-    private String description;
-
-    @Column(name = "url")
-    private String url;
-
-    @Column(name = "create_time")
-    private Timestamp createTime = new Timestamp(System.currentTimeMillis());
-
-    //case_id:子站中case可能存的是字符串
-    @Column(name = "case_id")
-    private String caseId;
-
-    @Column(name = "app_id")
-    private Long appId;
-
-    //是否有提示
-    @Column(name = "hint")
-    private Integer hint;
-
-    @Column(name = "is_public")
-    private Boolean visible = true;
-
-    @Column(name = "uploader_id")
-    private Long managerId;
-
-    @Column(name = "subject_id")
-    private Long subjectId;
-
-    @Column(name = "is_deleted")
-    private Boolean deleted = false;
-
-    @Column(name = "owner_id")
-    private Long ownerId;
-
-    public Long getOwnerId() {
-        return ownerId;
-    }
-
-    public void setOwnerId(Long ownerId) {
-        this.ownerId = ownerId;
-    }
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public Integer getDomain() {
-        return domain;
-    }
-
-    public void setDomain(Integer domain) {
-        this.domain = domain;
-    }
-
-    public Integer getDifficulty() {
-        return difficulty;
-    }
-
-    public void setDifficulty(Integer difficulty) {
-        this.difficulty = difficulty;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-
-    public String getCaseId() {
-        return caseId;
-    }
-
-    public void setCaseId(String caseId) {
-        this.caseId = caseId;
-    }
-
-    public Integer getHint() {
-        return hint;
-    }
-
-    public void setHint(Integer hint) {
-        this.hint = hint;
-    }
-
-    public Boolean getVisible() {
-        return visible;
-    }
-
-    public void setVisible(Boolean visible) {
-        this.visible = visible;
-    }
-
-    public Long getManagerId() {
-        return managerId;
-    }
-
-    public void setManagerId(Long managerId) {
-        this.managerId = managerId;
-    }
-
-    public Long getSubjectId() {
-        return subjectId;
-    }
-
-    public void setSubjectId(Long subjectId) {
-        this.subjectId = subjectId;
-    }
-
-    public Boolean getDeleted() {
-        return deleted;
-    }
-
-    public void setDeleted(Boolean deleted) {
-        this.deleted = deleted;
-    }
-
-    public void setAppId(Long appId){
-        this.appId=appId;
-    }
-
-    public Long getAppId(){
-        return this.appId;
-    }
-}
-

+ 63 - 10
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/CaseExtends.java

@@ -3,24 +3,77 @@ package cn.iselab.mooctest.site.models;
 import lombok.Data;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 import lombok.EqualsAndHashCode;
 
 
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Table;
+import javax.persistence.*;
+import java.sql.Timestamp;
 
 
 /**
 /**
- * Created by shanshan on 2017/6/28.
+ * Created by sean on 16/12/19.
  */
  */
-@EqualsAndHashCode(callSuper=true)
-@Data
+
+@EqualsAndHashCode(exclude = "createTime")
 @Entity
 @Entity
-@Table(name = "case_extends")
-public class CaseExtends extends Case{
-    @Column(name = "target_id")
-    private Long targetId;
+@Inheritance(strategy = InheritanceType.JOINED)
+@Table(name = "case_entity")
+@Data
+public class CaseExtends {
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @Column(name = "name")
+    private String name;
+
+    @Column(name = "content")
+    private String content;
+
+    @Column(name = "domain")
+    private Integer domain;
+
+    @Column(name = "difficulty")
+    private Integer difficulty;
+
+    @Column(name = "description")
+    private String description;
+
+    @Column(name = "url")
+    private String url;
+
+    @Column(name = "create_time")
+    private Timestamp createTime = new Timestamp(System.currentTimeMillis());
+
+    //case_id:子站中case可能存的是字符串
+    @Column(name = "case_id")
+    private String caseId;
+
+    @Column(name = "app_id")
+    private Long appId;
+
+    //是否有提示
+    @Column(name = "hint")
+    private Integer hint;
+
+    @Column(name = "is_public")
+    private Boolean visible = true;
+
+    @Column(name = "uploader_id")
+    private Long managerId;
+
+    @Column(name = "subject_id")
+    private Long subjectId;
+
+    @Column(name = "is_deleted")
+    private Boolean deleted = false;
+
+    @Column(name = "owner_id")
+    private Long ownerId;
+
     @Column(name = "platform")
     @Column(name = "platform")
     private Short platform;
     private Short platform;
+
     @Column(name = "subsite_id")
     @Column(name = "subsite_id")
     private Long answerWay;
     private Long answerWay;
+
     @Column(name = "properties")
     @Column(name = "properties")
     private String properties;
     private String properties;
 }
 }
+

+ 34 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Competition.java

@@ -0,0 +1,34 @@
+package cn.iselab.mooctest.site.models;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.persistence.*;
+
+/**
+ *
+ * @author csc
+ * @date 2017/10/17
+ */
+
+@Data
+@Entity
+@Table(name = "competition")
+public class Competition {
+    @Id
+    @GeneratedValue
+    private Long id;
+    @Column(name="name")
+    private String name;
+    @Column(name="status")
+    private Integer status;
+    @Column(name="is_active")
+    private Boolean isActive;
+    @Column(name="is_team")
+    private Boolean isTeam;
+    @Column(name="description")
+    private String description;
+    @Column(name="allow_enter")
+    private Boolean allowEnter;
+}
+

+ 31 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Competition2Task.java

@@ -0,0 +1,31 @@
+package cn.iselab.mooctest.site.models;
+
+import lombok.Data;
+
+import javax.persistence.*;
+
+/**
+ *
+ * @author csc
+ * @date 2017/10/17
+ */
+
+@Data
+@Entity
+@Table(name = "competition_2_task")
+public class Competition2Task {
+
+    @Id
+    @GeneratedValue
+    private Long id;
+    @Column(name="competition_id")
+    private Long competitionId;
+    @Column(name="task_id")
+    private Long taskId;
+    @Column(name="is_active")
+    private boolean isActive;
+    @Column(name="status")
+    private Integer index;
+    @Column(name="next_status")
+    private Integer nextIndex;
+}

+ 0 - 80
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Contest.java

@@ -1,80 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by lishuying on 17/3/30.
- */
-
-@Entity
-@Table(name = "contest")
-public class Contest {
-
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "name")
-    private String name;
-
-    @Column(name = "year")
-    private String year;
-
-    // 1为个人赛,2为团体赛
-    @Column(name = "type")
-    private Integer type;
-
-    @Column(name = "group_id")
-    private Long groupId;
-
-    @Column(name = "group_manager")
-    private String groupManager;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public String getYear() {
-        return year;
-    }
-
-    public void setYear(String year) {
-        this.year = year;
-    }
-
-    public Integer getType() {
-        return type;
-    }
-
-    public void setType(Integer type) {
-        this.type = type;
-    }
-
-    public Long getGroupId() {
-        return groupId;
-    }
-
-    public void setGroupId(Long groupId) {
-        this.groupId = groupId;
-    }
-
-    public String getGroupManager() {
-        return groupManager;
-    }
-
-    public void setGroupManager(String groupManager) {
-        this.groupManager = groupManager;
-    }
-}

+ 0 - 35
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ContestMentor.java

@@ -1,35 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import lombok.Data;
-
-import javax.persistence.*;
-
-/**
- * Created by shanshan on 2017/8/1.
- */
-@Data
-@Entity
-@Table(name = "contest_mentor")
-public class ContestMentor {
-    public static final Byte ROLE_MENTOR = 0;
-    public static final Byte ROLE_MEMBER = 1;
-
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "participant_id")
-    private Long participantId;
-
-    @Column(name = "exam_id")
-    private Long examId;
-
-    @Column(name = "teacher_name")
-    private String teacherName;
-
-    @Column(name = "teacher_email")
-    private String teacherEmail;
-
-    @Column(name = "role")
-    private Byte role;
-}

+ 0 - 44
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/DevTarget.java

@@ -1,44 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by ROGK on 2017/7/18.
- */
-@Entity
-@Table(name = "target_dev")
-public class DevTarget {
-    @Id
-    @GeneratedValue
-    private long id;
-
-    @Column(name = "upload_case_id")
-    private Long uploadedCaseId;
-
-    @Column(name = "end_time_millis")
-    private Long endTimeMillis;
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public Long getUploadedCaseId() {
-        return uploadedCaseId;
-    }
-
-    public void setUploadedCaseId(long uploadedCaseId) {
-        this.uploadedCaseId = uploadedCaseId;
-    }
-
-    public Long getEndTimeMillis() {
-        return endTimeMillis;
-    }
-
-    public void setEndTimeMillis(long endTimeMillis) {
-        this.endTimeMillis = endTimeMillis;
-    }
-}

Some files were not shown because too many files changed in this diff