Ver Fonte

Merge branch 'DEV' into 'Test'

Dev



See merge request !669

梅杰 há 7 anos atrás
pai
commit
eecb4d87c7
100 ficheiros alterados com 485 adições e 4676 exclusões
  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. 11 1
      mooctest-site-server/pom.xml
  5. 0 30
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/Application.java
  6. 1 5
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/McNodeCallBack.java
  7. 0 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/MutationCallBack.java
  8. 0 17
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AccountConstants.java
  9. 0 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AnswerWayConstants.java
  10. 0 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/AppConstants.java
  11. 15 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/CookieConsts.java
  12. 0 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/PageConstants.java
  13. 0 12
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/PrivilegeConstants.java
  14. 0 12
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/ProjectConstants.java
  15. 0 8
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/constant/UrlConstants.java
  16. 0 9
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/CryptKeys.java
  17. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/ScoreRuleKey.java
  18. 0 9
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/SessionKey.java
  19. 0 28
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/TaskStatus.java
  20. 0 29
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/enums/UserType.java
  21. 0 23
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/AppCreateEvent.java
  22. 3 19
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java
  23. 0 25
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/ReportCreateEvent.java
  24. 22 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/ScoreRuleChangeEvent.java
  25. 30 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/listener/ScoreRuleListener.java
  26. 29 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/initialize/InitExamSchedulerMap.java
  27. 0 1063
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/template/MailTemplates.java
  28. 0 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ApplicationStartup.java
  29. 0 91
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/AuthFilterConfiguration.java
  30. 1 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ClientFeatureConfiguration.java
  31. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ExecutorConfig.java
  32. 27 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/FileUploadConfiguration.java
  33. 1 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RequestLoggerAutoConfiguration.java
  34. 0 41
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/RpcServerConfiguration.java
  35. 10 12
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/realm/ShiroRealm.java
  36. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AdminDao.java
  37. 0 21
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AppDao.java
  38. 2 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AssignedTaskDao.java
  39. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Case2BugDao.java
  40. 0 58
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseDao.java
  41. 4 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/CaseExtendsDao.java
  42. 0 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Competition2TaskDao.java
  43. 0 95
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ContestDao.java
  44. 33 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ExamDao.java
  45. 0 37
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/GroupDao.java
  46. 0 39
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerDao.java
  47. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/ManagerSubsiteFeatureDao.java
  48. 7 7
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/MonitorDao.java
  49. 6 6
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Paper2CaseDao.java
  50. 2 3
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/PaperDao.java
  51. 6 6
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteDao.java
  52. 0 15
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/SubsiteFeatureDao.java
  53. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Target2UserDao.java
  54. 8 7
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDao.java
  55. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetDevDao.java
  56. 10 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetExtendsDao.java
  57. 0 15
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TargetWebDao.java
  58. 0 58
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/TaskDao.java
  59. 0 18
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/Worker2ContestDao.java
  60. 0 61
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/WorkerDao.java
  61. 0 10
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/custom/GenericUserDao.java
  62. 0 82
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/custom/UserDao.java
  63. 0 11
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/AppStatisDao.java
  64. 0 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/ApplicationDao.java
  65. 0 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/BugDao.java
  66. 0 22
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/fromKibug/MobileClientDao.java
  67. 0 21
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/AppPermissionDao.java
  68. 21 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/TargetPermissionDao.java
  69. 0 56
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/AuthResult.java
  70. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/GeneralGradeDTO.java
  71. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/NodeExtends.java
  72. 1 1
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/PageData.java
  73. 73 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/wechat/Token.java
  74. 0 67
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Admin.java
  75. 0 196
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Case.java
  76. 63 10
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/CaseExtends.java
  77. 0 80
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Contest.java
  78. 0 55
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/DevTarget.java
  79. 0 68
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/EmailTask.java
  80. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Exam.java
  81. 5 5
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Group.java
  82. 0 179
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Manager.java
  83. 0 78
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ManagerSubsiteFeature.java
  84. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Paper2Case.java
  85. 0 34
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/SubsiteFeature.java
  86. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Target.java
  87. 2 2
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Target2User.java
  88. 25 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/TargetExtends.java
  89. 0 56
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/WebTarget.java
  90. 2 0
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Weight.java
  91. 0 167
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Worker.java
  92. 0 46
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Worker2Contest.java
  93. 0 59
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromDev/BaseData.java
  94. 0 20
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/AppStatis.java
  95. 0 167
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/Application.java
  96. 0 12
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/CaseItem.java
  97. 0 62
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/MobileClient.java
  98. 0 23
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/TaskFromKibug.java
  99. 6 6
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/instancePermission/TargetPermission.java
  100. 46 49
      mooctest-site-server/src/main/java/cn/iselab/mooctest/site/rpc/Oauth2/impl/ExamServiceImpl2.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 {}

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

@@ -17,7 +17,7 @@
         <dependency>
             <groupId>cn.iselab.mooctest</groupId>
             <artifactId>user-dubbo-api</artifactId>
-            <version>1.0.16</version>
+            <version>1.0.20</version>
         </dependency>
 
         <dependency>
@@ -190,6 +190,16 @@
             </exclusions>
         </dependency>
         <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
+        </dependency>
+        <!-- zookeeper 依赖的健康检查的jar,所以需要引入actuator这个依赖 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-actuator</artifactId>
+            <version>${spring.boot.version}</version>
+        </dependency>
+        <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
             <version>5.1.38</version>

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

@@ -1,18 +1,10 @@
 package cn.iselab.mooctest.site;
 
-import cn.iselab.mooctest.site.configure.ApplicationStartup;
-import cn.iselab.mooctest.site.service.TargetGraphService;
-import cn.iselab.mooctest.site.service.updownload.DownloadService;
-import cn.iselab.mooctest.site.service.updownload.impl.DownloadServiceImpl;
-import cn.iselab.mooctest.site.web.data.forMongo.TargetGraphDTO;
-import com.google.gson.Gson;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.MessageSourceAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.aop.AopAutoConfiguration;
 import org.springframework.boot.autoconfigure.batch.BatchAutoConfiguration;
-import org.springframework.boot.autoconfigure.cloud.CloudAutoConfiguration;
 import org.springframework.boot.autoconfigure.dao.PersistenceExceptionTranslationAutoConfiguration;
 import org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchRepositoriesAutoConfiguration;
 import org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration;
@@ -50,15 +42,11 @@ import org.springframework.boot.autoconfigure.solr.SolrAutoConfiguration;
 import org.springframework.boot.autoconfigure.thymeleaf.ThymeleafAutoConfiguration;
 import org.springframework.boot.autoconfigure.velocity.VelocityAutoConfiguration;
 import org.springframework.boot.autoconfigure.websocket.WebSocketAutoConfiguration;
-import org.springframework.boot.context.embedded.MultipartConfigFactory;
 import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cache.annotation.EnableCaching;
-import org.springframework.context.annotation.Bean;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
 
-import javax.servlet.MultipartConfigElement;
-
 /**
  * @author liuzicong
  */
@@ -66,7 +54,6 @@ import javax.servlet.MultipartConfigElement;
         ActiveMQAutoConfiguration.class,
         AopAutoConfiguration.class,
         BatchAutoConfiguration.class,
-        CloudAutoConfiguration.class,
         DeviceDelegatingViewResolverAutoConfiguration.class,
         DeviceResolverAutoConfiguration.class,
         ElasticsearchRepositoriesAutoConfiguration.class,
@@ -110,27 +97,10 @@ import javax.servlet.MultipartConfigElement;
 @EnableCaching
 @EnableAsync
 public class Application {
-
     public static void main(String[] args) {
         SpringApplication application = new SpringApplication(Application.class);
-
         // To disabled web environment, change `true` to `false`
         application.setWebEnvironment(true);
-        application.addListeners(new ApplicationStartup());
         application.run(args);
     }
-
-    /**
-     * 文件上传配置
-     * @return
-     */
-    @Bean
-    public MultipartConfigElement multipartConfigElement() {
-        MultipartConfigFactory factory = new MultipartConfigFactory();
-        //单个文件最大
-        factory.setMaxFileSize("100MB"); //KB,MB
-        /// 设置总上传数据总大小
-        factory.setMaxRequestSize("500MB");
-        return factory.createMultipartConfig();
-    }
 }

+ 1 - 5
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/McNodeCallBack.java

@@ -1,19 +1,16 @@
 package cn.iselab.mooctest.site.common.acyncTask;
 
 import cn.iselab.mooctest.site.common.constant.MutationResultType;
-import cn.iselab.mooctest.site.models.Grade;
 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.web.data.forInternalUse.GeneralGradeDTO;
+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.data.forMongo.graph.Category;
 import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
-import cn.iselab.mooctest.site.web.logic.impl.GeneralCalculateScoreComponent;
 import com.google.gson.Gson;
 import org.json.JSONArray;
 import org.json.JSONObject;
@@ -35,7 +32,6 @@ import java.util.stream.Collectors;
  * @Modified By:
  */
 @Component
-@Scope("prototype")
 public class McNodeCallBack implements AsyncTaskCallBack{
 
     @Autowired

+ 0 - 8
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/acyncTask/MutationCallBack.java

@@ -3,18 +3,12 @@ package cn.iselab.mooctest.site.common.acyncTask;
 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.rpc.dev.data.NodeDTO;
 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.forInternalUse.GeneralGradeDTO;
 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.data.forMongo.graph.Category;
-import cn.iselab.mooctest.site.web.data.forMongo.graph.Node;
-import cn.iselab.mooctest.site.web.data.fromDev.AllMutationResult;
-import cn.iselab.mooctest.site.web.data.fromDev.MutationResult;
 import cn.iselab.mooctest.site.web.logic.CalculateSocreLogic;
 
 import com.google.gson.Gson;
@@ -23,7 +17,6 @@ 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;
 
 
@@ -31,7 +24,6 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import java.io.Serializable;
 import java.util.Map;
 
 

+ 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;
 
-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.
  */

+ 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";
+
+}

+ 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_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_CLIENT = "/api/client/";
     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_TARGET = "/api/target/";

+ 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";
-}

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

@@ -4,7 +4,7 @@ package cn.iselab.mooctest.site.common.enums;
  * Created by NJUta on 2017/6/8.
  */
 public enum ScoreRuleKey {
-    MANUAL,
+    manual,
     SCRIPT,
     SC,
     BC,

+ 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);
-    }
-}

+ 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);
-    }
-
-}

+ 3 - 19
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/common/event/EventsListener.java

@@ -6,8 +6,6 @@ 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.service.fromKibug.StatisService;
-import cn.iselab.mooctest.site.service.instancePermission.AppPermissionService;
 import cn.iselab.mooctest.site.web.logic.CaseLogic;
 import cn.iselab.mooctest.site.web.logic.ExamLogic;
 import cn.iselab.mooctest.site.web.logic.TargetLogic;
@@ -23,9 +21,6 @@ public class EventsListener implements InitializingBean {
     private EventUtil eventUtil;
 
     @Autowired
-    private StatisService statisService;
-
-    @Autowired
     private ContestMentorService instructorService;
 
     @Autowired
@@ -52,29 +47,18 @@ public class EventsListener implements InitializingBean {
     }
 
     @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.updateContestMentorPermission(event.getQualificationId(), event.getTeacherEmails());
     }
 
     @Subscribe
     public void afterAddTask2Competition(AddTask2CompetitionEvent event) throws Exception {
-        instructorService.addContestMentorPermission(event.getCompetitionId(),event.getTaskId());
+        instructorService.addContestMentorPermission(event.getCompetitionId(), event.getTaskId());
     }
 
     @Subscribe
     public void publicityTarget(PublicityTargetEvent publicityTargetEvent) throws Exception {
-        targetLogic.updateTarget(publicityTargetEvent.getTargetId(),null,true);
+        targetLogic.updateTarget(publicityTargetEvent.getTargetId(), null, true);
     }
 
     @Subscribe
@@ -85,7 +69,7 @@ public class EventsListener implements InitializingBean {
     @Subscribe
     public void afterEnterCompetition(EnterCompetitionEvent enterCompetitionEvent) throws Exception {
         Competition competition = competitionService.getCompetiton(enterCompetitionEvent.getCompetitionId());
-        if(competition.getStatus() > 0) {
+        if (competition.getStatus() > 0) {
             Competition2Task competition2Task = competitionService.getCompetition2TaskbyCompetitionIdAndIndex(
                     enterCompetitionEvent.getCompetitionId(), competition.getStatus());
             Long groupId = examLogic.getExamById(competition2Task.getTaskId()).getGroupIds().get(0);

+ 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);
-    }
-
-}

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

@@ -0,0 +1,22 @@
+package cn.iselab.mooctest.site.common.event;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Getter;
+
+@Getter
+@Builder
+@AllArgsConstructor
+public class ScoreRuleChangeEvent implements Event {
+
+    long examId;
+    long caseId;
+
+    public static ScoreRuleChangeEvent create(long examId, long caseId) {
+        return new ScoreRuleChangeEvent(examId, caseId);
+    }
+    @Override
+    public String getDescription() {
+        return String.format("score rule change, taskId: %d, caseId: %d", examId, caseId);
+    }
+}

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

@@ -0,0 +1,30 @@
+package cn.iselab.mooctest.site.common.event.listener;
+
+import cn.iselab.mooctest.site.common.event.EventUtil;
+import cn.iselab.mooctest.site.common.event.ScoreRuleChangeEvent;
+import cn.iselab.mooctest.site.web.logic.GeneralCalculateScoreLogic;
+import com.google.common.eventbus.Subscribe;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+
+@Component
+public class ScoreRuleListener {
+    @Autowired
+    private EventUtil eventUtil;
+
+    @Autowired
+    GeneralCalculateScoreLogic generalCalculateScoreLogic;
+
+    @PostConstruct
+    public void init() {
+        eventUtil.register(this);
+    }
+
+    @Subscribe
+    public void calculateGeneralScore(ScoreRuleChangeEvent event) {
+        generalCalculateScoreLogic.calculateScore(event.getExamId(), event.getCaseId(), null);
+
+    }
+}

+ 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("-----------------------------------------------------------------------------------------");
+    }
+}

+ 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 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/configure/ClientFeatureConfiguration.java

@@ -15,4 +15,5 @@ public class ClientFeatureConfiguration {
     private boolean email;
     private boolean oss;
     private boolean webide;
+    private boolean wechat;
 }

+ 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 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();
+    }
+}

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

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

@@ -42,7 +42,7 @@ public class ShiroRealm extends AuthorizingRealm {
     private MobileVerificationService mobileVerificationService;
 
     @Autowired
-    private AppPermissionService appPermissionService;
+    private TargetPermissionService targetPermissionService;
 
     @Autowired
     private TaskPermissionService taskPermissionService;
@@ -138,9 +138,9 @@ public class ShiroRealm extends AuthorizingRealm {
             CasePermission casePermission = (CasePermission) permission;
             return checkCasePermission(casePermission);
         }
-        if (permission instanceof AppPermission) {
-            AppPermission appPermission = (AppPermission) permission;
-            return checkAppPermission(appPermission);
+        if (permission instanceof TargetPermission) {
+            TargetPermission targetPermission = (TargetPermission) permission;
+            return checkTargetPermission(targetPermission);
         }
         if (permission instanceof GroupPermission) {
             GroupPermission groupPermission = (GroupPermission) permission;
@@ -168,16 +168,14 @@ public class ShiroRealm extends AuthorizingRealm {
         return taskPermissions.stream().anyMatch(tp -> tp.implies(taskPermission));
     }
 
-    private Boolean checkAppPermission(AppPermission appPermission) {
-        List<AppPermission> appPermissions = appPermissionService.getByUserIdAndInstanceId(appPermission.getUserId(),
-                appPermission.getInstanceId());
-//        if (appPermissions.stream().anyMatch(ap-> ap.getUserId().equals(0) && ap.getOperation().equals("*")
-//                || ap.getOperation().equals(appPermission.getOperation()))){
-//            return true;
-//        }
-        return appPermissions.stream().anyMatch(ap -> ap.implies(appPermission));
+    private Boolean checkTargetPermission(TargetPermission targetPermission) {
+        List<TargetPermission> targetPermissions = targetPermissionService.getByUserIdAndInstanceId(targetPermission.getId(),
+                targetPermission.getInstanceId());
+        return targetPermissions.stream().anyMatch(ap -> ap.implies(targetPermission));
     }
 
+
+
     private Boolean checkCasePermission(CasePermission casePermission) {
         List<CasePermission> casePermissions = casePermissionService.getByUserIdAndInstanceId(casePermission.getUserId(),
                 casePermission.getInstanceId());

+ 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);
-}

+ 2 - 1
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/AssignedTaskDao.java

@@ -7,6 +7,7 @@ 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 org.springframework.transaction.annotation.Propagation;
 
 import javax.transaction.Transactional;
 import java.util.List;
@@ -14,7 +15,7 @@ import java.util.List;
 /**
  * Created by Liu on 2016/12/27.
  */
-@Transactional
+@Transactional()
 public interface AssignedTaskDao extends PagingAndSortingRepository<AssignedTask, Long> {
 
     List<AssignedTask> findByTaskIdAndWorkerId(long taskId, long workerId);

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

@@ -18,7 +18,7 @@ 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 Case c, Bug b, CaseTake ct " +
+    @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 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.query.Param;
 
 import javax.transaction.Transactional;
 import java.util.List;
 
 /**
- * Created by shanshan on 2017/6/28.
+ * Created by sean on 16/12/24.
  */
 @Transactional
-public interface CaseExtendsDao  extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> {
+public interface CaseExtendsDao extends PagingAndSortingRepository<CaseExtends, Long>,JpaSpecificationExecutor<CaseExtends> {
 
     List<CaseExtends> findByAppId(long appId);
 }

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

@@ -1,12 +1,10 @@
 package cn.iselab.mooctest.site.dao;
 
 import cn.iselab.mooctest.site.models.Competition2Task;
-import cn.iselab.mooctest.site.models.Task;
 import org.springframework.data.repository.CrudRepository;
 
 import javax.transaction.Transactional;
 import java.util.ArrayList;
-import java.util.List;
 
 /**
  * Created by tangshanshan on 2017/11/3.

+ 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);
-}

+ 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;
 
-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.Pageable;
 import org.springframework.data.jpa.domain.Specifications;
@@ -18,28 +18,50 @@ import java.util.List;
  * Created by major on 2017/6/23.
  */
 @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
-    @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);
 
     @Query("select t " +
-            "from Task t " +
+            "from Exam t " +
             "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 " +
-            "(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);
+
+
+    @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);
 }

+ 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.User;
-import cn.iselab.mooctest.site.models.Worker;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.data.domain.Sort;
@@ -22,8 +21,6 @@ import java.util.List;
 @Transactional
 public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
 
-//    Page<Worker> GroupMemeberList(long groupId, Pageable pageable);
-
     List<Group> findByManagerId(long managerId);
     List<Group> findByOwnerId(long ownerId);
 
@@ -78,45 +75,11 @@ public interface GroupDao extends PagingAndSortingRepository<Group, Long> {
             "AND g2w.workerId = :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(" +
             "SELECT g2w.participantId FROM Group2Worker g2w WHERE g2w.groupId=: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 " +
             "FROM User u " +
             "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);
-}

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

@@ -28,24 +28,24 @@ public interface MonitorDao extends CrudRepository<User, Long>{
     @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 Task t")
+    @Query("SELECT COUNT(t) FROM Exam t")
     Integer getTotalExam();
 
-    @Query("SELECT COUNT(t) FROM Task t WHERE t.status = 0 AND t.beginTime < t.endTime")
+    @Query("SELECT COUNT(t) FROM Exam t WHERE t.status = 0 AND t.beginTime < t.endTime")
     Integer getUpComingExam();
 
-    @Query("SELECT COUNT(t) FROM Task t WHERE t.status = 1 AND t.beginTime < t.endTime")
+    @Query("SELECT COUNT(t) FROM Exam t WHERE t.status = 1 AND t.beginTime < t.endTime")
     Integer getOnGoingExam();
 
-    @Query("SELECT COUNT(t) FROM Task t WHERE (t.status = 2 OR t.status = 3 )AND t.beginTime < t.endTime")
+    @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 Case c WHERE c.deleted = false")
+    @Query("SELECT COUNT(c) FROM CaseExtends c WHERE c.deleted = false")
     Integer getTotalCases();
 
-    @Query("SELECT COUNT(c) FROM Case c WHERE c.deleted = false AND c.visible = true ")
+    @Query("SELECT COUNT(c) FROM CaseExtends c WHERE c.deleted = false AND c.visible = true ")
     Integer getPublicCaseNumbers();
 
-    @Query("SELECT COUNT(c) FROM Case c WHERE c.deleted = false AND c.visible = false ")
+    @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;
 
-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.repository.CrudRepository;
 import org.springframework.data.repository.query.Param;
@@ -13,14 +13,14 @@ import java.util.List;
  * @date 2017-03-08.
  */
 @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);
 
-    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;
 
-import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.Paper;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
@@ -20,10 +19,10 @@ public interface PaperDao extends PagingAndSortingRepository<Paper, Long>, JpaSp
 
     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);
 
-    @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")
     Page<Paper> findByCaseIdPrivate(@Param("caseId") Long caseId,
                                     @Param("ownerId") Long ownerId, Pageable pageable);

+ 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;
 
-import cn.iselab.mooctest.site.models.Case;
+import cn.iselab.mooctest.site.models.CaseExtends;
 import cn.iselab.mooctest.site.models.Subsite;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -19,19 +19,19 @@ public interface SubsiteDao extends CrudRepository<Subsite, Long> {
 
     Subsite findByName(String name);
 
-    @Query("SELECT c FROM Case c, Subject s " +
+    @Query("SELECT c FROM CaseExtends c, Subject s " +
             "WHERE s.subsiteId = :subsiteId " +
             "AND c.subjectId = s.id " +
             "AND c.visible = true " +
             "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 " +
             "AND c.subjectId = s.id " +
             "AND c.managerId = :managerId " +
             "AND c.visible = 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;
 
-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.repository.CrudRepository;
 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;
 
 
-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.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.Query;
 import org.springframework.data.repository.CrudRepository;
@@ -14,13 +11,17 @@ import org.springframework.data.repository.PagingAndSortingRepository;
 import org.springframework.data.repository.query.Param;
 
 import javax.transaction.Transactional;
+import java.util.List;
 
 /**
  * Created by ROGK on 2017/6/26.
  */
 @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);
-
-}

+ 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;
 
-import cn.iselab.mooctest.site.models.fromKibug.Application;
 import cn.iselab.mooctest.site.models.fromKibug.Bug;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 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 - 21
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/dao/instancePermission/AppPermissionDao.java

@@ -1,21 +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);
-
-    List<AppPermission> findByInstanceId(Long instanceId);
-}

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

@@ -0,0 +1,21 @@
+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);
+
+    List<TargetPermission> findByInstanceId(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 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;
 

+ 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());
     }
     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));
         return pageData;
     }

+ 73 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/data/wechat/Token.java

@@ -0,0 +1,73 @@
+package cn.iselab.mooctest.site.data.wechat;
+
+import java.util.Date;
+
+/**
+ * @Author ROKG
+ * @Description
+ * @Date: Created in 下午4:38 2018/4/2
+ * @Modified By:
+ */
+public class Token {
+
+    // 接口访问凭证
+    private String accessToken;
+    // 凭证有效期,单位:秒
+    private int expiresIn;
+    private Long createTime;
+
+    private String refresh_token;
+
+    private String openId;
+
+    public Token() {
+        createTime = System.currentTimeMillis();
+    }
+
+    public Long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Long createTime) {
+        this.createTime = createTime;
+    }
+
+    public String getAccessToken() {
+        return accessToken;
+    }
+
+    public void setAccessToken(String accessToken) {
+        this.accessToken = accessToken;
+    }
+
+    public int getExpiresIn() {
+        return expiresIn;
+    }
+
+    public void setExpiresIn(int expiresIn) {
+        this.expiresIn = expiresIn;
+    }
+
+    public boolean isValid() {
+        if ((System.currentTimeMillis() - createTime) < (expiresIn - 100) * 1000) {
+            return true;
+        }
+        return false;
+    }
+
+    public String getRefresh_token() {
+        return refresh_token;
+    }
+
+    public void setRefresh_token(String refresh_token) {
+        this.refresh_token = refresh_token;
+    }
+
+    public String getOpenId() {
+        return openId;
+    }
+
+    public void setOpenId(String openId) {
+        this.openId = openId;
+    }
+}

+ 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.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
-@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")
     private Short platform;
+
     @Column(name = "subsite_id")
     private Long answerWay;
+
     @Column(name = "properties")
     private String properties;
 }
+

+ 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 - 55
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/DevTarget.java

@@ -1,55 +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;
-
-    @Column(name = "language")
-    private String language;
-
-    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;
-    }
-
-    public String getLanguage() {
-        return language;
-    }
-
-    public void setLanguage(String language) {
-        this.language = language;
-    }
-}

+ 0 - 68
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/EmailTask.java

@@ -1,68 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by sean on 16/12/20.
- */
-
-@Entity
-@Table(name = "email_task")
-public class EmailTask {
-
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "receiver")
-    private String receiver;
-
-    @Column(name = "subject")
-    private String subject;
-
-    @Column(name = "content")
-    private String content;
-
-    @Column(name = "try_times")
-    private Integer tryTimes;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public String getReceiver() {
-        return receiver;
-    }
-
-    public void setReceiver(String receiver) {
-        this.receiver = receiver;
-    }
-
-    public String getSubject() {
-        return subject;
-    }
-
-    public void setSubject(String subject) {
-        this.subject = subject;
-    }
-
-    public String getContent() {
-        return content;
-    }
-
-    public void setContent(String content) {
-        this.content = content;
-    }
-
-    public Integer getTryTimes() {
-        return tryTimes;
-    }
-
-    public void setTryTimes(Integer tryTimes) {
-        this.tryTimes = tryTimes;
-    }
-}

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Task.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Exam.java

@@ -11,8 +11,8 @@ import java.util.Set;
  */
 @Entity
 @EqualsAndHashCode(of={"id"})
-@Table(name = "task")
-public class Task {
+@Table(name = "exam")
+public class Exam {
 
     public static final Integer STATUS_UPCOMING = 0;
     public static final Integer STATUS_ONGOING = 1;

+ 5 - 5
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Group.java

@@ -36,7 +36,7 @@ public class Group {
     @ManyToMany
     @JoinTable(name = "task_2_group", joinColumns = @JoinColumn(name = "group_id"),
             inverseJoinColumns = @JoinColumn(name = "task_id"))
-    private Set<Task> taskSet;
+    private Set<Exam> examSet;
 
     public Long getOwnerId() {
         return ownerId;
@@ -86,12 +86,12 @@ public class Group {
         this.managerId = managerId;
     }
 
-    public Set<Task> getTaskSet() {
-        return taskSet;
+    public Set<Exam> getExamSet() {
+        return examSet;
     }
 
-    public void setTaskSet(Set<Task> taskSet) {
-        this.taskSet = taskSet;
+    public void setExamSet(Set<Exam> examSet) {
+        this.examSet = examSet;
     }
 
     public void setIsActive(Boolean isActive){

+ 0 - 179
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Manager.java

@@ -1,179 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-import java.sql.Time;
-import java.sql.Timestamp;
-
-@Entity
-@Table(name = "manager")
-public class Manager {
-
-    public static final int STATUS_REJECTED = -1;
-    public static final int STATUS_APPROVED = 1;
-    public static final int STATUS_UNDER_REVIEW = 0;
-    @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;
-
-    @Column(name = "information")
-    private String information;
-
-    @Column(name = "openid")
-    private String openid;
-
-    @Column(name = "status")
-    private Integer status;
-
-    @Column(name = "level")
-    private Integer level;
-
-    @Column(name = "avatar")
-    private String avatar;
-
-    @Column(name = "expire_time")
-    private Timestamp expireTime;
-
-    @Column(name = "create_time")
-    private Timestamp createTime;
-
-    @Column(name = "group_num")
-    private Integer groupNum;
-
-    @Column(name = "group_size")
-    private Integer groupSize;
-
-    @Column(name = "task_num")
-    private Integer taskNum;
-
-    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;
-    }
-
-    public String getInformation() {
-        return information;
-    }
-
-    public void setInformation(String information) {
-        this.information = information;
-    }
-
-    public String getOpenid() {
-        return openid;
-    }
-
-    public void setOpenid(String openid) {
-        this.openid = openid;
-    }
-
-    public Integer getStatus() {
-        return status;
-    }
-
-    public void setStatus(Integer status) {
-        this.status = status;
-    }
-
-    public Integer getLevel() {
-        return level;
-    }
-
-    public void setLevel(Integer level) {
-        this.level = level;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public Timestamp getExpireTime() {
-        return expireTime;
-    }
-
-    public void setExpireTime(Timestamp expireTime) {
-        this.expireTime = expireTime;
-    }
-
-    public Integer getGroupNum() {
-        return groupNum;
-    }
-
-    public void setGroupNum(Integer groupNum) {
-        this.groupNum = groupNum;
-    }
-
-    public Integer getGroupSize() {
-        return groupSize;
-    }
-
-    public void setGroupSize(Integer groupSize) {
-        this.groupSize = groupSize;
-    }
-
-    public Integer getTaskNum() {
-        return taskNum;
-    }
-
-    public void setTaskNum(Integer taskNum) {
-        this.taskNum = taskNum;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-}

+ 0 - 78
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/ManagerSubsiteFeature.java

@@ -1,78 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-import java.sql.Timestamp;
-
-/**
- * Created by sean on 17/2/25.
- */
-@Entity
-@Table(name = "manager_2_subsite_feature")
-public class ManagerSubsiteFeature {
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "expire_time")
-    private Timestamp expireTime;
-
-    @Column(name = "feature_id")
-    private Long featureId;
-
-    @Column(name = "manager_id")
-    private Long managerId;
-
-    @Column(name = "subsite_id")
-    private Long subsiteId;
-
-    @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 Timestamp getExpireTime() {
-        return expireTime;
-    }
-
-    public void setExpireTime(Timestamp expireTime) {
-        this.expireTime = expireTime;
-    }
-
-    public Long getFeatureId() {
-        return featureId;
-    }
-
-    public void setFeatureId(Long featureId) {
-        this.featureId = featureId;
-    }
-
-    public Long getManagerId() {
-        return managerId;
-    }
-
-    public void setManagerId(Long managerId) {
-        this.managerId = managerId;
-    }
-
-    public Long getSubsiteId() {
-        return subsiteId;
-    }
-
-    public void setSubsiteId(Long subsiteId) {
-        this.subsiteId = subsiteId;
-    }
-}

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Task2Case.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Paper2Case.java

@@ -7,8 +7,8 @@ import javax.persistence.*;
  */
 
 @Entity
-@Table(name = "task_2_case")
-public class Task2Case {
+@Table(name = "paper_2_case")
+public class Paper2Case {
 
     @Id
     @GeneratedValue

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

@@ -1,34 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by sean on 17/2/25.
- */
-@Entity
-@Table(name = "subsite_feature")
-public class SubsiteFeature {
-
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "name")
-    private String name;
-
-    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;
-    }
-}

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/App.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Target.java

@@ -7,8 +7,8 @@ import java.sql.Timestamp;
  * Created by sean on 17/2/25.
  */
 @Entity
-@Table(name = "app")
-public class App {
+@Table(name = "target")
+public class Target {
 
     public static final int UPLOADED = 0;
     public static final int APPROVED = 1;

+ 2 - 2
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/App2User.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Target2User.java

@@ -7,8 +7,8 @@ import java.sql.Timestamp;
 
 @Data
 @Entity
-@Table(name = "app_user")
-public class App2User {
+@Table(name = "target_user")
+public class Target2User {
     public static final int UPLOADED = 0;
     public static final int APPROVED = 1;
     public static final int REJECTED = 2;

+ 25 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/TargetExtends.java

@@ -0,0 +1,25 @@
+package cn.iselab.mooctest.site.models;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import javax.persistence.*;
+
+@Data
+@Entity
+@Table(name = "target_extends")
+public class TargetExtends{
+
+    @Id
+    @GeneratedValue
+    private Long id;
+
+    @Column(name = "target_id")
+    private Long targetId;
+
+    @Column(name = "property_name")
+    private String propertyName;
+
+    @Column(name = "property_value")
+    private String  propertyValue;
+}

+ 0 - 56
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/WebTarget.java

@@ -1,56 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by ROGK on 2017/9/4.
- */
-@Entity
-@Table(name = "target_web")
-public class WebTarget {
-
-    @Id
-    @GeneratedValue
-    private long id;
-
-    @Column(name = "super_id")
-    private Long superId;
-
-    @Column(name = "end_time_millis")
-    private Long endTimeMillis;
-
-    @Column(name = "category")
-    private String category;
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public Long getSuperId() {
-        return superId;
-    }
-
-    public void setSuperId(long superId) {
-        this.superId = superId;
-    }
-
-    public Long getEndTimeMillis() {
-        return endTimeMillis;
-    }
-
-    public void setEndTimeMillis(long endTimeMillis) {
-        this.endTimeMillis = endTimeMillis;
-    }
-
-    public String getCategory() {
-        return category;
-    }
-
-    public void setCategory(String category) {
-        this.category = category;
-    }
-}

+ 2 - 0
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Weight.java

@@ -4,6 +4,8 @@ import lombok.EqualsAndHashCode;
 
 import javax.persistence.*;
 import javax.validation.constraints.NotNull;
+import java.util.HashMap;
+import java.util.Map;
 
 /**
  * @author Alan on 2017/3/28

+ 0 - 167
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Worker.java

@@ -1,167 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-import java.sql.Timestamp;
-
-/**
- * Created by sean on 16/12/19.
- */
-@Entity
-@Table(name = "worker")
-public class Worker {
-
-    @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;
-
-    @Column(name = "openid")
-    private String openid;
-
-    @Column(name = "level")
-    private Integer level;
-
-    @Column(name = "avatar")
-    private String avatar;
-
-    @Column(name = "information")
-    private String information;
-
-    @Column(name = "teacher_name")
-    private String teacherName;
-
-    @Column(name = "teacher_email")
-    private String teacherEmail;
-
-    @Column(name = "school_year")
-    private Integer schoolYear;
-
-    @Column(name = "location")
-    private String location;
-
-    @Column(name = "create_time")
-    private Timestamp createTime;
-
-    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;
-    }
-
-    public String getOpenid() {
-        return openid;
-    }
-
-    public void setOpenid(String openid) {
-        this.openid = openid;
-    }
-
-    public Integer getLevel() {
-        return level;
-    }
-
-    public void setLevel(Integer level) {
-        this.level = level;
-    }
-
-    public String getAvatar() {
-        return avatar;
-    }
-
-    public void setAvatar(String avatar) {
-        this.avatar = avatar;
-    }
-
-    public String getInformation() {
-        return information;
-    }
-
-    public void setInformation(String information) {
-        this.information = information;
-    }
-
-    public String getTeacherName() {
-        return teacherName;
-    }
-
-    public void setTeacherName(String teacherName) {
-        this.teacherName = teacherName;
-    }
-
-    public String getTeacherEmail() {
-        return teacherEmail;
-    }
-
-    public void setTeacherEmail(String teacherEmail) {
-        this.teacherEmail = teacherEmail;
-    }
-
-    public Integer getSchoolYear() {
-        return schoolYear;
-    }
-
-    public void setSchoolYear(Integer schoolYear) {
-        this.schoolYear = schoolYear;
-    }
-
-    public String getLocation() {
-        return location;
-    }
-
-    public void setLocation(String location) {
-        this.location = location;
-    }
-
-    public Timestamp getCreateTime() {
-        return createTime;
-    }
-
-    public void setCreateTime(Timestamp createTime) {
-        this.createTime = createTime;
-    }
-}

+ 0 - 46
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/Worker2Contest.java

@@ -1,46 +0,0 @@
-package cn.iselab.mooctest.site.models;
-
-import javax.persistence.*;
-
-/**
- * Created by lishuying on 17/3/30.
- */
-
-@Entity
-@Table(name = "worker_2_contest")
-public class Worker2Contest {
-
-    @Id
-    @GeneratedValue
-    private Long id;
-
-    @Column(name = "worker_id")
-    private Long workerId;
-
-    @Column(name = "contest_id")
-    private Long contestId;
-
-    public Long getId() {
-        return id;
-    }
-
-    public void setId(Long id) {
-        this.id = id;
-    }
-
-    public Long getWorkerId() {
-        return workerId;
-    }
-
-    public void setWorkerId(Long workerId) {
-        this.workerId = workerId;
-    }
-
-    public Long getContestId() {
-        return contestId;
-    }
-
-    public void setContestId(Long contestId) {
-        this.contestId = contestId;
-    }
-}

+ 0 - 59
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromDev/BaseData.java

@@ -1,59 +0,0 @@
-package cn.iselab.mooctest.site.models.fromDev;
-
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.lang.reflect.Modifier;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * @author AlanDelip
- */
-public class BaseData {
-
-    @Override
-    public String toString() {
-
-        Class clazz = getClass();
-        Field[] fields = clazz.getDeclaredFields();
-
-        String fieldFormat = "%s=%s, ";
-        String format = "%s[%s]";
-
-        Method[] methods = clazz.getMethods();
-        Map<String, Method> methodMap = new HashMap<>();
-        for (Method method : methods) {
-            if (method.getName().startsWith("get") && Modifier.isPublic(method.getModifiers())) {
-                methodMap.put(method.getName().toLowerCase(), method);
-            }
-        }
-
-        StringBuilder fieldsSB = new StringBuilder();
-        for (Field field : fields) {
-            String fieldName = field.getName();
-            String fieldValueStr = null;
-            try {
-                Method m = methodMap.get("get" + fieldName.toLowerCase());
-                if (m == null) {
-                    continue;
-                }
-                fieldValueStr = String.valueOf(m.invoke(this));
-            } catch (IllegalAccessException | InvocationTargetException e) {
-                fieldValueStr = null;
-                e.printStackTrace();
-            }
-            fieldsSB.append(String.format(fieldFormat, fieldName, fieldValueStr));
-        }
-
-        String fieldsStr = fieldsSB.toString();
-        if (fieldsStr.lastIndexOf(", ") != -1) {
-            fieldsStr = fieldsStr.substring(0, fieldsStr.lastIndexOf(", "));
-        }
-
-        return String.format(format, clazz.getSimpleName(), fieldsStr);
-
-    }
-
-}
-

+ 0 - 20
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/AppStatis.java

@@ -1,20 +0,0 @@
-package cn.iselab.mooctest.site.models.fromKibug;
-
-import lombok.Data;
-
-import javax.persistence.Column;
-import javax.persistence.Entity;
-import javax.persistence.Id;
-import javax.persistence.Table;
-
-@Data
-@Entity
-@Table(name = "application_statis")
-public class AppStatis {
-    @Id
-    private long id;
-    @Column(name = "device_model_statis")
-    private String deviceModelStatis;
-    @Column(name = "device_os_statis")
-    private String deviceOsStatis;
-}

+ 0 - 167
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/Application.java

@@ -1,167 +0,0 @@
-package cn.iselab.mooctest.site.models.fromKibug;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-
-import javax.persistence.*;
-
-/**
- * Created by NJUta on 2017/5/26.
- */
-@JsonIgnoreProperties({"managerId", "createTimeMillis", "extra", "from"})
-@Entity
-@Table(name = "application")
-public class Application {
-    @Id
-    private long id;
-    @Column(name = "manager_id")
-    private long managerId;
-    /**
-     * 与慕测上传的原始需求相对应的外键
-     */
-    @Column(name = "uploaded_case_id")
-    private long uploadedCaseId;
-    @Column(name = "name")
-    private String name;
-    @Column(name = "platform")
-    private short platform;
-    @Column(name = "category")
-    private String category;
-    @Column(name = "icon_location")
-    private String iconLocation;
-    @Column(name = "app_location")
-    private String appLocation;
-    @Column(name = "require_location")
-    private String requireLocation;
-    @Column(name = "launch_data")
-    private String launchData;
-    @Column(name = "create_time_millis")
-    private long createTimeMillis;
-    @Column(name = "end_time_millis")
-    private long endTimeMillis;
-    @Column(name = "test_type")
-    private short testType;
-    @Column(name = "status")
-    private short status;
-    @Column(name = "from_cloud")
-    private int fromCloud;
-
-    public long getId() {
-        return id;
-    }
-
-    public void setId(long id) {
-        this.id = id;
-    }
-
-    public long getManagerId() {
-        return managerId;
-    }
-
-    public void setManagerId(long managerId) {
-        this.managerId = managerId;
-    }
-
-    public long getUploadedCaseId() {
-        return uploadedCaseId;
-    }
-
-    public void setUploadedCaseId(long uploadedCaseId) {
-        this.uploadedCaseId = uploadedCaseId;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
-    public short getPlatform() {
-        return platform;
-    }
-
-    public void setPlatform(short platform) {
-        this.platform = platform;
-    }
-
-    public String getCategory() {
-        return category;
-    }
-
-    public void setCategory(String category) {
-        this.category = category;
-    }
-
-    public String getIconLocation() {
-        return iconLocation;
-    }
-
-    public void setIconLocation(String iconLocation) {
-        this.iconLocation = iconLocation;
-    }
-
-    public String getAppLocation() {
-        return appLocation;
-    }
-
-    public void setAppLocation(String appLocation) {
-        this.appLocation = appLocation;
-    }
-
-    public String getRequireLocation() {
-        return requireLocation;
-    }
-
-    public void setRequireLocation(String requireLocation) {
-        this.requireLocation = requireLocation;
-    }
-
-    public String getLaunchData() {
-        return launchData;
-    }
-
-    public void setLaunchData(String launchData) {
-        this.launchData = launchData;
-    }
-
-    public long getCreateTimeMillis() {
-        return createTimeMillis;
-    }
-
-    public void setCreateTimeMillis(long createTimeMillis) {
-        this.createTimeMillis = createTimeMillis;
-    }
-
-    public long getEndTimeMillis() {
-        return endTimeMillis;
-    }
-
-    public void setEndTimeMillis(long endTimeMillis) {
-        this.endTimeMillis = endTimeMillis;
-    }
-
-    public short getTestType() {
-        return testType;
-    }
-
-    public void setTestType(short testType) {
-        this.testType = testType;
-    }
-
-    public short getStatus() {
-        return status;
-    }
-
-    public void setStatus(short status) {
-        this.status = status;
-    }
-
-    public int getFromCloud() {
-        return fromCloud;
-    }
-
-    public void setFromCloud(int fromCloud) {
-        this.fromCloud = fromCloud;
-    }
-}

+ 0 - 12
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/CaseItem.java

@@ -1,12 +0,0 @@
-package cn.iselab.mooctest.site.models.fromKibug;
-
-import lombok.Data;
-
-/**
- * Created by jessiechen on 2016/10/13.
- */
-@Data
-public class CaseItem {
-    private long id;
-    private boolean taken;
-}

+ 0 - 62
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/MobileClient.java

@@ -1,62 +0,0 @@
-package cn.iselab.mooctest.site.models.fromKibug;
-
-import javax.persistence.*;
-
-/**
- * Created by NJUta on 2017/5/26.
- */
-@Entity
-@Table(name = "mobile_client")
-public class MobileClient {
-    @Id
-    @GeneratedValue
-    private int id;
-    @Column(name = "platform")
-    private short platform;
-    @Column(name = "url")
-    private String url;
-    @Column(name = "version")
-    private float version;
-    @Column(name = "description")
-    private String description;
-
-    public int getId() {
-        return id;
-    }
-
-    public void setId(int id) {
-        this.id = id;
-    }
-
-    public short getPlatform() {
-        return platform;
-    }
-
-    public void setPlatform(short platform) {
-        this.platform = platform;
-    }
-
-    public String getUrl() {
-        return url;
-    }
-
-    public void setUrl(String url) {
-        this.url = url;
-    }
-
-    public float getVersion() {
-        return version;
-    }
-
-    public void setVersion(float version) {
-        this.version = version;
-    }
-
-    public String getDescription() {
-        return description;
-    }
-
-    public void setDescription(String description) {
-        this.description = description;
-    }
-}

+ 0 - 23
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/fromKibug/TaskFromKibug.java

@@ -1,23 +0,0 @@
-package cn.iselab.mooctest.site.models.fromKibug;
-
-import lombok.Data;
-
-import java.util.List;
-
-/**
- * Created by NJUta on 2017/6/1.
- */
-@Data
-public class TaskFromKibug {
-    private long id;
-    private String name;
-    private String information;
-    private int duration;
-    private String managerName;
-    private long managerId;
-    private String beginTime;
-    private String endTime;
-    private String subsite;
-    private List<String> groups;
-    private List<CaseItem> caseList;
-}

+ 6 - 6
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/instancePermission/AppPermission.java → mooctest-site-server/src/main/java/cn/iselab/mooctest/site/models/instancePermission/TargetPermission.java

@@ -10,8 +10,8 @@ import java.sql.Timestamp;
  * @date 2017-07-12.
  */
 @Entity
-@Table(name = "app_permission")
-public class AppPermission implements Permission {
+@Table(name = "target_permission")
+public class TargetPermission implements Permission {
     @Id
     @GeneratedValue
     private Long id;
@@ -73,10 +73,10 @@ public class AppPermission implements Permission {
         return String.join(":", userId.toString(), "app", operation, instanceId.toString());
     }
 
-    public AppPermission() {
+    public TargetPermission() {
     }
 
-    public AppPermission(String permissionString) {
+    public TargetPermission(String permissionString) {
         this.setParts(permissionString);
     }
 
@@ -89,9 +89,9 @@ public class AppPermission implements Permission {
 
     @Override
     public boolean implies(Permission p) {
-        if (!(p instanceof AppPermission)) return false;
+        if (!(p instanceof TargetPermission)) return false;
 
-        AppPermission other = (AppPermission) p;
+        TargetPermission other = (TargetPermission) p;
 
         boolean isImplies = true;
 

+ 46 - 49
mooctest-site-server/src/main/java/cn/iselab/mooctest/site/rpc/Oauth2/impl/ExamServiceImpl2.java

@@ -4,7 +4,7 @@ import cn.iselab.mooctest.site.common.constant.Constants;
 import cn.iselab.mooctest.site.common.constant.OwningPartyConstants;
 import cn.iselab.mooctest.site.dao.Exam2CaseDao;
 import cn.iselab.mooctest.site.dao.OpenId2UserIdDao;
-import cn.iselab.mooctest.site.dao.Task2CaseDao;
+import cn.iselab.mooctest.site.dao.Paper2CaseDao;
 import cn.iselab.mooctest.site.dao.UserDao;
 import cn.iselab.mooctest.site.models.*;
 import cn.iselab.mooctest.site.rpc.oauth2.api.ExamService;
@@ -12,8 +12,8 @@ import cn.iselab.mooctest.site.rpc.oauth2.data.*;
 import cn.iselab.mooctest.site.service.AssignedTaskService;
 import cn.iselab.mooctest.site.service.ExamStatusService;
 import cn.iselab.mooctest.site.service.PaperService;
-import cn.iselab.mooctest.site.service.TaskService;
 import cn.iselab.mooctest.site.service.instancePermission.PaperPermissionService;
+import cn.iselab.mooctest.site.util.data.Converter;
 import cn.iselab.mooctest.site.web.data.fromDev.PluginResultVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportScriptResultVO;
 import cn.iselab.mooctest.site.web.data.fromKibug.ReportVO;
@@ -21,7 +21,6 @@ import cn.iselab.mooctest.site.web.logic.ExamLogic;
 import cn.iselab.mooctest.site.web.logic.OSSLogic;
 import cn.iselab.mooctest.site.web.logic.ReportLogic;
 import cn.iselab.mooctest.site.web.logic.fromDev.PluginLogic;
-import cn.iselab.mooctest.site.web.util.Converter;
 import com.alibaba.dubbo.config.annotation.Service;
 import org.apache.shiro.authz.UnauthorizedException;
 import org.json.JSONArray;
@@ -36,7 +35,7 @@ import java.util.List;
 /**
  * Created by shanshan on 2017/8/14.
  */
-@Service(version = Constants.OAUTH2APIVERSION, timeout = 12000 )
+@Service(version = Constants.OAUTH2APIVERSION, timeout = 12000)
 @Component
 public class ExamServiceImpl2 implements ExamService {
     @Autowired
@@ -54,12 +53,10 @@ public class ExamServiceImpl2 implements ExamService {
     @Autowired
     private PaperService paperService;
     @Autowired
-    private Task2CaseDao task2CaseDao;
+    private Paper2CaseDao paper2CaseDao;
     @Autowired
     private Exam2CaseDao exam2CaseDao;
     @Autowired
-    private TaskService taskService;
-    @Autowired
     private ExamStatusService examStatusService;
     @Autowired
     private UserDao userDao;
@@ -70,7 +67,7 @@ public class ExamServiceImpl2 implements ExamService {
 
     @Override
     public TaskVO getCaseList(Long userId, Long taskId, Long subsiteId) throws Exception {
-        if(!examLogic.checkTaskViewPermission(userId, taskId)){
+        if (!examLogic.checkTaskViewPermission(userId, taskId)) {
             throw new UnauthorizedException("no permission for task");
         }
         PluginResultVO vo = pluginLogic.getCaseList(userId, taskId);
@@ -85,16 +82,16 @@ public class ExamServiceImpl2 implements ExamService {
 
     @Override
     public KibugCaseVO getKibugCase(Long userId, Long taskId, Long caseId) throws Exception {
-        if(!examLogic.checkTaskViewPermission(userId, taskId)){
+        if (!examLogic.checkTaskViewPermission(userId, taskId)) {
             throw new UnauthorizedException("no permission for task");
         }
-        cn.iselab.mooctest.site.web.data.fromKibug.KibugCaseVO kibugCaseVO = pluginLogic.getKibugCase(userId,taskId,caseId);
+        cn.iselab.mooctest.site.web.data.fromKibug.KibugCaseVO kibugCaseVO = pluginLogic.getKibugCase(userId, taskId, caseId);
         return Converter.convert(KibugCaseVO.class, kibugCaseVO);
     }
 
     @Override
     public Long createReport(ReportVO4Oauth vo) throws Exception {
-        if(!examLogic.checkTaskViewPermission(vo.getWorkerId(), vo.getTaskId())){
+        if (!examLogic.checkTaskViewPermission(vo.getWorkerId(), vo.getTaskId())) {
             throw new UnauthorizedException("no permission for task");
         }
         ReportVO reportVO = Converter.convert(ReportVO.class, vo);
@@ -103,10 +100,10 @@ public class ExamServiceImpl2 implements ExamService {
 
     @Override
     public void updateReport(ReportVO4Oauth vo) throws Exception {
-        if(vo.getId()==null){
+        if (vo.getId() == null) {
             throw new IllegalArgumentException("no reportId");
         }
-        if(!examLogic.checkTaskViewPermission(vo.getWorkerId(), vo.getTaskId())){
+        if (!examLogic.checkTaskViewPermission(vo.getWorkerId(), vo.getTaskId())) {
             throw new UnauthorizedException("no permission for task");
         }
         ReportVO reportVO = Converter.convert(ReportVO.class, vo);
@@ -124,55 +121,55 @@ public class ExamServiceImpl2 implements ExamService {
         long taskId = taskResultDTO.getTask_id();
 
         HashMap<Long, String> caseNameMap = taskResultDTO.getTask_case_list();
-        Task task = null;
+        Exam exam = null;
         long participantId;
         boolean needCreatePaper = true;
-        if(assignedTaskService.getAssignedTasks(taskId).size() > 0) {
+        if (assignedTaskService.getAssignedTasks(taskId).size() > 0) {
             needCreatePaper = false;
         }
-        for(ScoreDetails scoreDetails: taskResultDTO.getScoreDetails()) {
+        for (ScoreDetails scoreDetails : taskResultDTO.getScoreDetails()) {
             OpenId2UserId openId2UserId = openId2UserIdDao.findByOpenId(scoreDetails.getOpen_id());
             participantId = openId2UserId.getUserId();
             try {
-                task = examService.getExamByIdAndParticipantIdIfPermited(taskId, openId2UserId.getUserId());
+                exam = examService.getExamByIdAndParticipantIdIfPermited(taskId, openId2UserId.getUserId());
             } catch (UnauthorizedException exception) {
 
                 continue;
             }
-            this.saveAssignedTask(participantId, scoreDetails, task, caseNameMap);
+            this.saveAssignedTask(participantId, scoreDetails, exam, caseNameMap);
         }
-        if(task != null && needCreatePaper) {
-            Paper paper = this.savePaperAndPaper2Case(task.getName(), caseNameMap);
+        if (exam != null && needCreatePaper) {
+            Paper paper = this.savePaperAndPaper2Case(exam.getName(), caseNameMap);
             this.saveExam2PaperAndExam2Case(paper, taskId, caseNameMap);
             this.updateTaskStatus(taskId);
         }
 
         // insert data into assignedtask
-        // new paper for the task (paper and paper2case)
+        // new paper for the exam (paper and paper2case)
         // copy cases to exam (savetask2exam)
-        // update status of task
+        // update status of exam
         return true;
     }
 
-    private AssignedTask saveAssignedTask(long participantId, ScoreDetails scoreDetails, Task task, HashMap<Long, String> caseNameMap) {
-        AssignedTask assignedTask = assignedTaskService.getAssignedTask(task.getId(), participantId);
-        if(assignedTask == null) {
+    private AssignedTask saveAssignedTask(long participantId, ScoreDetails scoreDetails, Exam exam, HashMap<Long, String> caseNameMap) {
+        AssignedTask assignedTask = assignedTaskService.getAssignedTask(exam.getId(), participantId);
+        if (assignedTask == null) {
             assignedTask = new AssignedTask();
         }
         assignedTask.setWorkerId(participantId);
-        assignedTask.setName(task.getName());
-        assignedTask.setTaskId(task.getId());
-        assignedTask.setManagerId(task.getManagerId());
+        assignedTask.setName(exam.getName());
+        assignedTask.setTaskId(exam.getId());
+        assignedTask.setManagerId(exam.getManagerId());
         assignedTask.setContent("");
         assignedTask.setScore((scoreDetails.getScore()));
-        assignedTask.setOwnerId(task.getOwnerId());
+        assignedTask.setOwnerId(exam.getOwnerId());
         assignedTask.setParticipantId(participantId);
 
         JSONObject assignedResults = new JSONObject();
         JSONObject assignedResultObj = new JSONObject();
 
-        for(CaseDetailDTO caseDetailDTO: scoreDetails.getDetail()) {
-            JSONObject caseDetail =  new JSONObject();
+        for (CaseDetailDTO caseDetailDTO : scoreDetails.getDetail()) {
+            JSONObject caseDetail = new JSONObject();
             caseDetail.put("id", caseDetailDTO.getCase_id());
             caseDetail.put("maxScore", caseDetailDTO.getScore());
             JSONArray scores = new JSONArray();
@@ -184,37 +181,37 @@ public class ExamServiceImpl2 implements ExamService {
         }
         assignedResultObj.put("results", assignedResults);
         assignedTask.setResult(assignedResultObj.toString());
-        return  assignedTaskService.saveOrUpdateAssignedTask(assignedTask);
+        return assignedTaskService.saveOrUpdateAssignedTask(assignedTask);
     }
 
     private Paper savePaperAndPaper2Case(String paperName, HashMap<Long, String> caseNameMap) {
         Paper paper = new Paper();
-        paper.setName(paperName+"试卷");
+        paper.setName(paperName + "试卷");
         User thirdUser = userDao.findByEmail(OwningPartyConstants.THIRDEMAIL);
-        if(thirdUser != null) {
+        if (thirdUser != null) {
             paper.setOwnerId(new Long(thirdUser.getId()));
-        }else {
+        } else {
             paper.setOwnerId(-1L);
         }
         paper = paperService.createOrUpdate(paper);
         paperPermissionService.publishPaper(paper.getId());
 
-        for(Long id: caseNameMap.keySet()) {
-            Task2Case task2Case = new Task2Case();
-            task2Case.setTaskId(paper.getId());
-            task2Case.setAutoSelect(true);
-            task2Case.setCaseId(id);
-            task2Case.setCaseIndex(0);
-            task2Case.setCount(1);
-            task2Case.setWeight(0.0);
-            task2CaseDao.save(task2Case);
+        for (Long id : caseNameMap.keySet()) {
+            Paper2Case paper2Case = new Paper2Case();
+            paper2Case.setTaskId(paper.getId());
+            paper2Case.setAutoSelect(true);
+            paper2Case.setCaseId(id);
+            paper2Case.setCaseIndex(0);
+            paper2Case.setCount(1);
+            paper2Case.setWeight(0.0);
+            paper2CaseDao.save(paper2Case);
         }
         return paper;
     }
 
     private void saveExam2PaperAndExam2Case(Paper paper, long taskId, HashMap<Long, String> nameCaseMap) {
         examService.saveExam2Paper(taskId, paper.getId());
-        for(Long id: nameCaseMap.keySet()) {
+        for (Long id : nameCaseMap.keySet()) {
             Exam2Case exam2Case = new Exam2Case();
             exam2Case.setCaseId(id);
             exam2Case.setExamId(taskId);
@@ -225,12 +222,12 @@ public class ExamServiceImpl2 implements ExamService {
     }
 
     public void updateTaskStatus(long taskId) {
-        Task task = taskService.getTask(taskId);
-        examStatusService.updateStatus(task);
+        Exam exam = examService.getTask(taskId);
+        examStatusService.updateStatus(exam);
         return;
     }
 
-    public String getSumbitSignature(String path,Long examId,Long caseId,Long workerId,String fileName){
-        return ossLogic.getSubmitSiganature(path,examId,caseId,workerId,fileName);
+    public String getSumbitSignature(String path, Long examId, Long caseId, Long workerId, String fileName) {
+        return ossLogic.getSubmitSiganature(path, examId, caseId, workerId, fileName);
     }
 }

Alguns ficheiros não foram mostrados porque muitos ficheiros mudaram neste diff