Kaynağa Gözat

Merge branch 'feature-V2.0' into 'Dev'

Feature v2.0

See merge request crowd-2019/crowd-test-service-backend!63
郭超 5 yıl önce
ebeveyn
işleme
b019a3f58b
35 değiştirilmiş dosya ile 429 ekleme ve 256 silme
  1. 0 1
      core/src/main/java/com/mooctest/crowd/domain/Application.java
  2. 1 0
      core/src/main/java/com/mooctest/crowd/domain/domainobject/TechnicalArticles.java
  3. 0 3
      core/src/main/java/com/mooctest/crowd/domain/model/BankCardPO.java
  4. 1 0
      core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestProjectPO.java
  5. 3 3
      core/src/main/java/com/mooctest/crowd/domain/repository/PublicationsRepo.java
  6. 6 1
      site/pom.xml
  7. 2 2
      site/src/main/java/com/mooctest/crowd/site/SiteApplication.java
  8. 53 3
      site/src/main/java/com/mooctest/crowd/site/configuration/RedisSessionConfiguration.java
  9. 167 167
      site/src/main/java/com/mooctest/crowd/site/configuration/ShiroConfiguration.java
  10. 0 0
      site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java
  11. 2 1
      site/src/main/java/com/mooctest/crowd/site/controller/PersonalDataController.java
  12. 4 3
      site/src/main/java/com/mooctest/crowd/site/data/dto/CrowdTestSquareIndexDTO.java
  13. 2 5
      site/src/main/java/com/mooctest/crowd/site/data/dto/IndexInfoDTO.java
  14. 2 2
      site/src/main/java/com/mooctest/crowd/site/data/dto/MyCrowdDTO.java
  15. 2 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/ApplicationTypeVO.java
  16. 2 0
      site/src/main/java/com/mooctest/crowd/site/data/vo/BankCardVO.java
  17. 6 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/CompetitionVO.java
  18. 2 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java
  19. 3 3
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java
  20. 16 15
      site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java
  21. 3 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/EvolutionAgencyVO.java
  22. 7 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/FieldVO.java
  23. 7 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/PartnerVO.java
  24. 7 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/ResourceVO.java
  25. 3 2
      site/src/main/java/com/mooctest/crowd/site/data/vo/TechnicalArticlesVO.java
  26. 3 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/TestTypeVO.java
  27. 4 1
      site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java
  28. 2 1
      site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java
  29. 54 27
      site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java
  30. 1 2
      site/src/main/java/com/mooctest/crowd/site/service/CommonService.java
  31. 2 1
      site/src/main/java/com/mooctest/crowd/site/service/PersonalDataService.java
  32. 6 3
      site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java
  33. 2 1
      site/src/main/java/com/mooctest/crowd/site/service/impl/PersonalDataServiceImpl.java
  34. 46 0
      site/src/main/java/com/mooctest/crowd/site/util/CacheUtil.java
  35. 8 1
      site/src/main/resources/application.yml

+ 0 - 1
core/src/main/java/com/mooctest/crowd/domain/Application.java

@@ -7,7 +7,6 @@ import org.springframework.boot.web.servlet.ServletComponentScan;
 import org.springframework.cache.annotation.EnableCaching;
 import org.springframework.scheduling.annotation.EnableAsync;
 import org.springframework.scheduling.annotation.EnableScheduling;
-
 @SpringBootApplication
 @EnableConfigurationProperties
 @ServletComponentScan

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/domainobject/TechnicalArticles.java

@@ -2,6 +2,7 @@ package com.mooctest.crowd.domain.domainobject;
 
 import lombok.Data;
 
+import java.sql.Date;
 import java.sql.Timestamp;
 
 @Data

+ 0 - 3
core/src/main/java/com/mooctest/crowd/domain/model/BankCardPO.java

@@ -15,9 +15,6 @@ public class BankCardPO {
     @GeneratedValue(strategy = GenerationType.IDENTITY)
     private Long id;
 
-    @Column(name = "BC_NAME")
-    private String name;
-
     @Column(name="BC_USER")
     private String user;
 

+ 1 - 0
core/src/main/java/com/mooctest/crowd/domain/model/CrowdTestProjectPO.java

@@ -4,6 +4,7 @@ import lombok.Data;
 
 import javax.persistence.*;
 import java.io.Serializable;
+import java.sql.Date;
 import java.sql.Timestamp;
 
 /**

+ 3 - 3
core/src/main/java/com/mooctest/crowd/domain/repository/PublicationsRepo.java

@@ -38,9 +38,9 @@ public class PublicationsRepo implements IPublicationsRepo{
             public Predicate toPredicate(Root<PublicationsPO> a, CriteriaQuery<?> q, CriteriaBuilder cb) {
                 Predicate predicate = cb.conjunction();
                 if(keyword != null) {
-                    predicate.getExpressions().add(
-                            cb.like(a.<String>get("longTitle"), "%" + StringUtils.trim(keyword) + "%")
-                    );
+                    Predicate title=cb.like(a.get("title"), "%" + StringUtils.trim(keyword) + "%");
+                    Predicate author=cb.like(a.get("authorList"), "%" + StringUtils.trim(keyword) + "%");
+                    predicate.getExpressions().add(cb.or(title,author));
                 }
                 return predicate;
             }

+ 6 - 1
site/pom.xml

@@ -132,6 +132,12 @@
 			<artifactId>kaptcha</artifactId>
 			<version>2.3.2</version>
 		</dependency>
+		<!-- Spring Cache -->
+<!--		<dependency>-->
+<!--			<groupId>org.springframework.boot</groupId>-->
+<!--			<artifactId>spring-boot-starter-cache</artifactId>-->
+<!--			<version>2.1.3.RELEASE</version>-->
+<!--		</dependency>-->
 	</dependencies>
 
 	<build>
@@ -139,7 +145,6 @@
 			<plugin>
 				<groupId>org.springframework.boot</groupId>
 				<artifactId>spring-boot-maven-plugin</artifactId>
-
 			</plugin>
 		</plugins>
 	</build>

+ 2 - 2
site/src/main/java/com/mooctest/crowd/site/SiteApplication.java

@@ -2,13 +2,13 @@ package com.mooctest.crowd.site;
 
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.ComponentScan;
+import org.springframework.cache.annotation.EnableCaching;
 
 @SpringBootApplication(scanBasePackages = "com.mooctest.crowd")
+@EnableCaching
 public class SiteApplication {
 
 	public static void main(String[] args) {
 		SpringApplication.run(SiteApplication.class, args);
 	}
-
 }

+ 53 - 3
site/src/main/java/com/mooctest/crowd/site/configuration/RedisSessionConfiguration.java

@@ -1,18 +1,26 @@
 package com.mooctest.crowd.site.configuration;
 
+import com.fasterxml.jackson.annotation.JsonAutoDetect;
+import com.fasterxml.jackson.annotation.PropertyAccessor;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.cache.RedisCacheConfiguration;
+import org.springframework.data.redis.cache.RedisCacheManager;
+import org.springframework.data.redis.cache.RedisCacheWriter;
 import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
 import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.RedisSerializationContext;
 import org.springframework.data.redis.serializer.RedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
 import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
 import org.springframework.session.web.http.CookieSerializer;
 import org.springframework.session.web.http.DefaultCookieSerializer;
 
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
 /**
  * @author: Diors.Po
  * @Email: 171256175@qq.com
@@ -25,6 +33,8 @@ public class RedisSessionConfiguration {
     @Value("${website.domain}")
     private String domainName;
 
+    @Value("${cache.expire.duration}")
+    private int expireDuration;
 
     @Bean
     public CookieSerializer cookieSerializer() {
@@ -45,4 +55,44 @@ public class RedisSessionConfiguration {
         return new CustomSessionDefaultRedisSerializer();
     }
 
+    /**
+     * 最新版,设置redis缓存过期时间
+     */
+
+    @Bean
+    public RedisCacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
+        return new RedisCacheManager(
+                RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory),
+                this.getRedisCacheConfigurationWithTtl(expireDuration), // 默认策略,未配置的 key 会使用这个
+                this.getRedisCacheConfigurationMap() // 指定 key 策略
+        );
+    }
+
+    private Map<String, RedisCacheConfiguration> getRedisCacheConfigurationMap() {
+        Map<String, RedisCacheConfiguration> redisCacheConfigurationMap = new HashMap<>();
+        //SsoCache和BasicDataCache进行过期时间配置
+        redisCacheConfigurationMap.put("messageCache", this.getRedisCacheConfigurationWithTtl(30 * 60));
+
+        //自定义设置缓存时间
+        redisCacheConfigurationMap.put("userCache", this.getRedisCacheConfigurationWithTtl(expireDuration));
+
+        return redisCacheConfigurationMap;
+    }
+
+    private RedisCacheConfiguration getRedisCacheConfigurationWithTtl(Integer seconds) {
+        Jackson2JsonRedisSerializer<Object> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(Object.class);
+        ObjectMapper om = new ObjectMapper();
+        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
+        om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
+        jackson2JsonRedisSerializer.setObjectMapper(om);
+        RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig();
+        redisCacheConfiguration = redisCacheConfiguration.serializeValuesWith(
+                RedisSerializationContext
+                        .SerializationPair
+                        .fromSerializer(jackson2JsonRedisSerializer)
+        ).entryTtl(Duration.ofSeconds(seconds));
+
+        return redisCacheConfiguration;
+    }
+
 }

+ 167 - 167
site/src/main/java/com/mooctest/crowd/site/configuration/ShiroConfiguration.java

@@ -1,177 +1,177 @@
-package com.mooctest.crowd.site.configuration;
-
-import org.apache.shiro.cache.ehcache.EhCacheManager;
-import org.apache.shiro.spring.LifecycleBeanPostProcessor;
-import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
-import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
-import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.context.annotation.DependsOn;
-
-/**
- * Shiro configuration
- * Created by Liu on 2017/6/6.
- */
-@Configuration
-public class ShiroConfiguration {
-    /**
-     * LifecycleBeanPostProcessor,这是个DestructionAwareBeanPostProcessor的子类,
-     * 负责org.apache.shiro.util.Initializable类型bean的生命周期的,初始化和销毁。
-     * 主要是AuthorizingRealm类的子类,以及EhCacheManager类。
-     */
-    @Bean(name = "lifecycleBeanPostProcessor")
-    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
-        return new LifecycleBeanPostProcessor();
-    }
-
-    /**
-     * ShiroRealm,这是个自定义的认证类,继承自AuthorizingRealm,
-     * 负责用户的认证和权限的处理,可以参考JdbcRealm的实现。
-     */
-//    @ConditionalOnProperty(prefix = "featureSwitch", name = "client.loginByUserCenter", matchIfMissing = false)
-//    @Bean(name = "shiroRealm")
-//    @DependsOn("lifecycleBeanPostProcessor")
-//    public ShiroRealmAdapt2UserCenter shiroRealmAdapt2UserCenter() {
-//        // System.out.println("\nCreate ShiroRealm Adapt to UserCenter\n");
-//        ShiroRealmAdapt2UserCenter realm = new ShiroRealmAdapt2UserCenter();
-//        return realm;
+//package com.mooctest.crowd.site.configuration;
+//
+//import org.apache.shiro.cache.ehcache.EhCacheManager;
+//import org.apache.shiro.spring.LifecycleBeanPostProcessor;
+//import org.apache.shiro.web.session.mgt.DefaultWebSessionManager;
+//import org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator;
+//import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
+//import org.springframework.context.annotation.Bean;
+//import org.springframework.context.annotation.Configuration;
+//import org.springframework.context.annotation.DependsOn;
+//
+///**
+// * Shiro configuration
+// * Created by Liu on 2017/6/6.
+// */
+//@Configuration
+//public class ShiroConfiguration {
+//    /**
+//     * LifecycleBeanPostProcessor,这是个DestructionAwareBeanPostProcessor的子类,
+//     * 负责org.apache.shiro.util.Initializable类型bean的生命周期的,初始化和销毁。
+//     * 主要是AuthorizingRealm类的子类,以及EhCacheManager类。
+//     */
+//    @Bean(name = "lifecycleBeanPostProcessor")
+//    public LifecycleBeanPostProcessor lifecycleBeanPostProcessor() {
+//        return new LifecycleBeanPostProcessor();
 //    }
 //
-//    @Bean(name = "shiroRealm")
+//    /**
+//     * ShiroRealm,这是个自定义的认证类,继承自AuthorizingRealm,
+//     * 负责用户的认证和权限的处理,可以参考JdbcRealm的实现。
+//     */
+////    @ConditionalOnProperty(prefix = "featureSwitch", name = "client.loginByUserCenter", matchIfMissing = false)
+////    @Bean(name = "shiroRealm")
+////    @DependsOn("lifecycleBeanPostProcessor")
+////    public ShiroRealmAdapt2UserCenter shiroRealmAdapt2UserCenter() {
+////        // System.out.println("\nCreate ShiroRealm Adapt to UserCenter\n");
+////        ShiroRealmAdapt2UserCenter realm = new ShiroRealmAdapt2UserCenter();
+////        return realm;
+////    }
+////
+////    @Bean(name = "shiroRealm")
+////    @DependsOn("lifecycleBeanPostProcessor")
+////    public ShiroRealm shiroRealm() {
+////        // System.out.println("\nCreate ShiroRealm don't Adapt to UserCenter\n");
+////        ShiroRealm realm = new ShiroRealm();
+////        return realm;
+////    }
+//
+//    /**
+//     * EhCacheManager,缓存管理,用户登陆成功后,把用户信息和权限信息缓存起来,
+//     * 然后每次用户请求时,放入用户的session中,如果不设置这个bean,每个请求都会查询一次数据库。
+//     */
+//    @Bean(name = "ehCacheManager")
 //    @DependsOn("lifecycleBeanPostProcessor")
-//    public ShiroRealm shiroRealm() {
-//        // System.out.println("\nCreate ShiroRealm don't Adapt to UserCenter\n");
-//        ShiroRealm realm = new ShiroRealm();
-//        return realm;
+//    public EhCacheManager ehCacheManager() {
+//        return new EhCacheManager();
 //    }
-
-    /**
-     * EhCacheManager,缓存管理,用户登陆成功后,把用户信息和权限信息缓存起来,
-     * 然后每次用户请求时,放入用户的session中,如果不设置这个bean,每个请求都会查询一次数据库。
-     */
-    @Bean(name = "ehCacheManager")
-    @DependsOn("lifecycleBeanPostProcessor")
-    public EhCacheManager ehCacheManager() {
-        return new EhCacheManager();
-    }
-
-    /**
-     * SecurityManager,权限管理,这个类组合了登陆,登出,权限,session的处理,是个比较重要的类。
-     */
-//    @Bean(name = "securityManager")
-//    public DefaultWebSecurityManager securityManager(AuthorizingRealm shiroRealm) {
-//        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
-//        securityManager.setRealm(shiroRealm);
-//        securityManager.setCacheManager(ehCacheManager());
-//        //securityManager.setSessionManager(defaultWebSessionManager());
 //
-//        return securityManager;
+//    /**
+//     * SecurityManager,权限管理,这个类组合了登陆,登出,权限,session的处理,是个比较重要的类。
+//     */
+////    @Bean(name = "securityManager")
+////    public DefaultWebSecurityManager securityManager(AuthorizingRealm shiroRealm) {
+////        DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
+////        securityManager.setRealm(shiroRealm);
+////        securityManager.setCacheManager(ehCacheManager());
+////        //securityManager.setSessionManager(defaultWebSessionManager());
+////
+////        return securityManager;
+////    }
+//
+//    /**
+//     * ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。
+//     * 它主要保持了三项数据,securityManager,filters,filterChainDefinitionManager。
+//     */
+////    @Bean(name = "shiroFilter")
+////    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
+////        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
+////        shiroFilterFactoryBean.setSecurityManager(securityManager);
+////
+////        Map<String, Filter> filters = new LinkedHashMap<>();
+////        filters.put("authc", new MyAuthorizationFilter());
+////        shiroFilterFactoryBean.setFilters(filters);
+////
+////        Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();
+////
+////        filterChainDefinitionManager.put("/api/cookie/set", "anon");
+////        filterChainDefinitionManager.put("/api/test/login", "anon");
+////        filterChainDefinitionManager.put("/api/test/register", "anon");
+////        filterChainDefinitionManager.put("/api/featureSwitch", "anon");
+////        filterChainDefinitionManager.put("/api/ossConfiguration","anon");
+////        filterChainDefinitionManager.put("/api/common/tag/**", "authc");
+////        filterChainDefinitionManager.put("/api/common/**", "anon");
+////        filterChainDefinitionManager.put("/api/mobileLogin", "anon");
+////        filterChainDefinitionManager.put("/api/case/nodeList", "anon");
+////        filterChainDefinitionManager.put("/api/exam/**/info","anon");
+////        filterChainDefinitionManager.put("/api/payEmail", "anon");
+////        filterChainDefinitionManager.put("/api/product/send", "anon");
+////
+////        filterChainDefinitionManager.put("/logout", "anon");
+////        filterChainDefinitionManager.put("/api/dev/**", "anon");
+////        filterChainDefinitionManager.put("/api/kibug/plugin/**", "anon");
+////        filterChainDefinitionManager.put("/api/wechat/**", "anon");
+////
+////        filterChainDefinitionManager.put("/api/pythonCommunity/exercise/**", "anon");
+////        filterChainDefinitionManager.put("/api/pythonCommunity/statistic/**", "authc");
+////        filterChainDefinitionManager.put("/api/support/**", "anon");
+////        filterChainDefinitionManager.put("/api/evaluation/**", "authc");
+////
+////        filterChainDefinitionManager.put("/api/onlinejudge/**","anon");
+////
+////        filterChainDefinitionManager.put("/api/codeVisualize/**", "anon");
+////
+////        filterChainDefinitionManager.put("/api/onlinejudge/u/**","authc");
+////        filterChainDefinitionManager.put("/api/sendGetHelpEmail", "anon");
+////        filterChainDefinitionManager.put("/**", "authc");
+////        filterChainDefinitionManager.put("/api/caseExport", "anon");
+////        filterChainDefinitionManager.put("/api/caseImport", "anon");
+////
+////        filterChainDefinitionManager.put("/api/contest/enterWithoutLogin/**", "anon");
+////
+////
+////
+////
+////        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);
+////
+////        shiroFilterFactoryBean.setSuccessUrl("/");
+////        shiroFilterFactoryBean.setLoginUrl("/");
+////        shiroFilterFactoryBean.setUnauthorizedUrl("");
+////        return shiroFilterFactoryBean;
+////    }
+//
+//    /**
+//     * DefaultAdvisorAutoProxyCreator,Spring的一个bean,由Advisor决定对哪些类的方法进行AOP代理。
+//     */
+//    @Bean
+//    @ConditionalOnMissingBean
+//    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
+//        DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
+//        defaultAAP.setProxyTargetClass(true);
+//        return defaultAAP;
 //    }
-
-    /**
-     * ShiroFilterFactoryBean,是个factorybean,为了生成ShiroFilter。
-     * 它主要保持了三项数据,securityManager,filters,filterChainDefinitionManager。
-     */
-//    @Bean(name = "shiroFilter")
-//    public ShiroFilterFactoryBean shiroFilterFactoryBean(SecurityManager securityManager) {
-//        ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();
-//        shiroFilterFactoryBean.setSecurityManager(securityManager);
-//
-//        Map<String, Filter> filters = new LinkedHashMap<>();
-//        filters.put("authc", new MyAuthorizationFilter());
-//        shiroFilterFactoryBean.setFilters(filters);
-//
-//        Map<String, String> filterChainDefinitionManager = new LinkedHashMap<String, String>();
-//
-//        filterChainDefinitionManager.put("/api/cookie/set", "anon");
-//        filterChainDefinitionManager.put("/api/test/login", "anon");
-//        filterChainDefinitionManager.put("/api/test/register", "anon");
-//        filterChainDefinitionManager.put("/api/featureSwitch", "anon");
-//        filterChainDefinitionManager.put("/api/ossConfiguration","anon");
-//        filterChainDefinitionManager.put("/api/common/tag/**", "authc");
-//        filterChainDefinitionManager.put("/api/common/**", "anon");
-//        filterChainDefinitionManager.put("/api/mobileLogin", "anon");
-//        filterChainDefinitionManager.put("/api/case/nodeList", "anon");
-//        filterChainDefinitionManager.put("/api/exam/**/info","anon");
-//        filterChainDefinitionManager.put("/api/payEmail", "anon");
-//        filterChainDefinitionManager.put("/api/product/send", "anon");
-//
-//        filterChainDefinitionManager.put("/logout", "anon");
-//        filterChainDefinitionManager.put("/api/dev/**", "anon");
-//        filterChainDefinitionManager.put("/api/kibug/plugin/**", "anon");
-//        filterChainDefinitionManager.put("/api/wechat/**", "anon");
-//
-//        filterChainDefinitionManager.put("/api/pythonCommunity/exercise/**", "anon");
-//        filterChainDefinitionManager.put("/api/pythonCommunity/statistic/**", "authc");
-//        filterChainDefinitionManager.put("/api/support/**", "anon");
-//        filterChainDefinitionManager.put("/api/evaluation/**", "authc");
-//
-//        filterChainDefinitionManager.put("/api/onlinejudge/**","anon");
-//
-//        filterChainDefinitionManager.put("/api/codeVisualize/**", "anon");
-//
-//        filterChainDefinitionManager.put("/api/onlinejudge/u/**","authc");
-//        filterChainDefinitionManager.put("/api/sendGetHelpEmail", "anon");
-//        filterChainDefinitionManager.put("/**", "authc");
-//        filterChainDefinitionManager.put("/api/caseExport", "anon");
-//        filterChainDefinitionManager.put("/api/caseImport", "anon");
-//
-//        filterChainDefinitionManager.put("/api/contest/enterWithoutLogin/**", "anon");
-//
 //
+//    /**
+//     * AuthorizationAttributeSourceAdvisor,shiro里实现的Advisor类,
+//     * 内部使用AopAllianceAnnotationsAuthorizingMethodInterceptor来拦截用以下注解的方法。
+//     */
+////    @Bean
+////    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
+////        AuthorizationAttributeSourceAdvisor aASA = new AuthorizationAttributeSourceAdvisor();
+////        aASA.setSecurityManager(securityManager);
+////        return aASA;
+////    }
+//
+////    @Bean(name = "sessionDao")
+////    public MySessionDao sessionDao() {
+////        MySessionDao sessionDao = new MySessionDao();
+////        sessionDao.setSessionIdGenerator(new JavaUuidSessionIdGenerator());
+//////        sessionDao.setSessionIdGenerator(JavaUuidSessionIdGenerator);
+////        return sessionDao;
+////    }
+//
+//    @Bean(name = "sessionManager")
+//    public DefaultWebSessionManager defaultWebSessionManager() {
+//        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
+//        sessionManager.setCacheManager(ehCacheManager());
+//        sessionManager.setGlobalSessionTimeout(1800000);//超时时间
+//        sessionManager.setSessionValidationSchedulerEnabled(true);//定时清除无效的session
+//        sessionManager.setSessionValidationInterval(1800000);//半个小时清理一次失效的session
+//        sessionManager.setDeleteInvalidSessions(true);//删除无效的session
+////        sessionManager.setSessionDAO(sessionDao());
+//        return sessionManager;
+//    }
 //
+//}
 //
-//        shiroFilterFactoryBean.setFilterChainDefinitionMap(filterChainDefinitionManager);
 //
-//        shiroFilterFactoryBean.setSuccessUrl("/");
-//        shiroFilterFactoryBean.setLoginUrl("/");
-//        shiroFilterFactoryBean.setUnauthorizedUrl("");
-//        return shiroFilterFactoryBean;
-//    }
-
-    /**
-     * DefaultAdvisorAutoProxyCreator,Spring的一个bean,由Advisor决定对哪些类的方法进行AOP代理。
-     */
-    @Bean
-    @ConditionalOnMissingBean
-    public DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {
-        DefaultAdvisorAutoProxyCreator defaultAAP = new DefaultAdvisorAutoProxyCreator();
-        defaultAAP.setProxyTargetClass(true);
-        return defaultAAP;
-    }
-
-    /**
-     * AuthorizationAttributeSourceAdvisor,shiro里实现的Advisor类,
-     * 内部使用AopAllianceAnnotationsAuthorizingMethodInterceptor来拦截用以下注解的方法。
-     */
-//    @Bean
-//    public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager) {
-//        AuthorizationAttributeSourceAdvisor aASA = new AuthorizationAttributeSourceAdvisor();
-//        aASA.setSecurityManager(securityManager);
-//        return aASA;
-//    }
-
-//    @Bean(name = "sessionDao")
-//    public MySessionDao sessionDao() {
-//        MySessionDao sessionDao = new MySessionDao();
-//        sessionDao.setSessionIdGenerator(new JavaUuidSessionIdGenerator());
-////        sessionDao.setSessionIdGenerator(JavaUuidSessionIdGenerator);
-//        return sessionDao;
-//    }
-
-    @Bean(name = "sessionManager")
-    public DefaultWebSessionManager defaultWebSessionManager() {
-        DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
-        sessionManager.setCacheManager(ehCacheManager());
-        sessionManager.setGlobalSessionTimeout(1800000);//超时时间
-        sessionManager.setSessionValidationSchedulerEnabled(true);//定时清除无效的session
-        sessionManager.setSessionValidationInterval(1800000);//半个小时清理一次失效的session
-        sessionManager.setDeleteInvalidSessions(true);//删除无效的session
-//        sessionManager.setSessionDAO(sessionDao());
-        return sessionManager;
-    }
-
-}
-
-

Dosya farkı çok büyük olduğundan ihmal edildi
+ 0 - 0
site/src/main/java/com/mooctest/crowd/site/controller/CommonController.java


+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/controller/PersonalDataController.java

@@ -7,6 +7,7 @@ import com.mooctest.crowd.site.data.vo.BankCardVO;
 import com.mooctest.crowd.site.data.vo.QualificationVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
 import com.mooctest.crowd.site.service.PersonalDataService;
+import org.codehaus.jettison.json.JSONException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -54,7 +55,7 @@ public class PersonalDataController {
     }
 
     @RequestMapping(value = "/addbankcard/{userId:\\d+}", method = RequestMethod.POST)
-    public BankCardDTO addBankCard(@PathVariable("userId") long userId, @RequestBody BankCardVO bankCardVO){
+    public BankCardDTO addBankCard(@PathVariable("userId") long userId, @RequestBody BankCardVO bankCardVO) throws JSONException {
         return  personalDataService.addBankCard(userId,bankCardVO);
     }
 

+ 4 - 3
site/src/main/java/com/mooctest/crowd/site/data/dto/CrowdTestSquareIndexDTO.java

@@ -33,13 +33,14 @@ public class CrowdTestSquareIndexDTO {
      */
     public void initHotTaskAndProject(){
         List<CrowdTestProjectVO> projectVOS = this.crowdTestProjectVOs.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getCreateTime).reversed()).collect(Collectors.toList());
-        this.crowdTestProjectVOs = projectVOS;
+        this.crowdTestProjectVOs = projectVOS.subList(0,6);
         //根据参与人数和创建时间进行排序
         List<CrowdTestProjectVO> list1 = projectVOS.stream().sorted(Comparator.comparing(CrowdTestProjectVO::getJoinCount).reversed()).collect(Collectors.toList());
         //截取前七条
         this.hotCrowdTestProjectVOs = list1.subList(0, 7);
-        List<CrowdTaskVO> tasklist1 = crowdTestTaskVOS.stream().sorted(Comparator.comparing(CrowdTaskVO::getAcceptedCount).reversed()).collect(Collectors.toList());
-        List<CrowdTaskVO> tasklist2 = tasklist1.stream().sorted(Comparator.comparing(CrowdTaskVO::getCreateTime).reversed()).collect(Collectors.toList());
+        List<CrowdTaskVO> tasklist1 = crowdTestTaskVOS.stream().sorted(Comparator.comparing(CrowdTaskVO::getCreateTime).reversed()).collect(Collectors.toList());
+        this.crowdTestTaskVOS=tasklist1.subList(0,6);
+        List<CrowdTaskVO> tasklist2 = tasklist1.stream().sorted(Comparator.comparing(CrowdTaskVO::getParticipantCount).reversed()).collect(Collectors.toList());
         //过滤掉已完成的
         tasklist2.stream().filter(ct -> ct.getStatus() != CrowdTestTaskStatus.HAS_FINISHED);
         this.hotCrowdTaskVOs = tasklist2.subList(0, 7);

+ 2 - 5
site/src/main/java/com/mooctest/crowd/site/data/dto/IndexInfoDTO.java

@@ -3,6 +3,7 @@ package com.mooctest.crowd.site.data.dto;
 import com.mooctest.crowd.site.data.vo.*;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -10,8 +11,7 @@ import java.util.List;
  * @Date: 2019.7.15 20:15
  */
 @Data
-public class IndexInfoDTO {
-
+public class IndexInfoDTO implements Serializable {
     private List<TestTypeVO> testTypeList;
     private List<ApplicationTypeVO> applicationTypeList;
     private List<ApplicationTypeVO> applicationTypeRank;
@@ -22,7 +22,4 @@ public class IndexInfoDTO {
     private List<ResourceVO> resourceList;
     private List<EvolutionAgencyVO> residentAgencyList;
     private List<PartnerVO> partnerList;
-//    private List<String> imgList;
-//    private List<CrowdTaskVO> hotTaskList;
-//    private List<PieChartDataVO> systemStatistics;
 }

+ 2 - 2
site/src/main/java/com/mooctest/crowd/site/data/dto/MyCrowdDTO.java

@@ -2,10 +2,10 @@ package com.mooctest.crowd.site.data.dto;
 
 import com.mooctest.crowd.site.data.vo.CrowdProjectVO;
 import com.mooctest.crowd.site.data.vo.CrowdTaskVO;
-import com.mooctest.crowd.site.data.vo.PieChartDataVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -13,7 +13,7 @@ import java.util.List;
  * @Date: 2019.7.15 20:17
  */
 @Data
-public class MyCrowdDTO {
+public class MyCrowdDTO implements Serializable {
     private UserVO userVO;
     private List<CrowdTaskVO> unfinishedTasks;
     private List<CrowdTaskVO> finishedTasks;

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/ApplicationTypeVO.java

@@ -5,6 +5,7 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.util.List;
 
 /**
@@ -14,7 +15,7 @@ import java.util.List;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class ApplicationTypeVO {
+public class ApplicationTypeVO implements Serializable {
     private String code;
     private String name;
     private Long count;

+ 2 - 0
site/src/main/java/com/mooctest/crowd/site/data/vo/BankCardVO.java

@@ -13,4 +13,6 @@ public class BankCardVO {
     private String number;
     private String code;
     private Long userId;
+    private String logoUrl;
+
 }

+ 6 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/CompetitionVO.java

@@ -1,8 +1,11 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.Competition;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.sql.Timestamp;
 
 /**
@@ -10,7 +13,9 @@ import java.sql.Timestamp;
  * @date 2019/7/6 17:54
  */
 @Data
-public class CompetitionVO {
+@NoArgsConstructor
+@AllArgsConstructor
+public class CompetitionVO implements Serializable {
     private Long id;
     private String name;
     private String linkUrl;

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdProjectVO.java

@@ -7,6 +7,7 @@ import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
 import java.sql.Timestamp;
 import java.util.HashMap;
 import java.util.List;
@@ -18,7 +19,7 @@ import java.util.Map;
  */
 @Data
 @NoArgsConstructor
-public class CrowdProjectVO {
+public class CrowdProjectVO implements Serializable {
 
     private String id;
     private String name;

+ 3 - 3
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTaskVO.java

@@ -1,11 +1,11 @@
 package com.mooctest.crowd.site.data.vo;
 
-import com.mooctest.crowd.domain.domainobject.CrowdTestProjectStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTask;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskAcceptStatus;
 import com.mooctest.crowd.domain.domainobject.CrowdTestTaskStatus;
 import lombok.Data;
 
+import java.io.Serializable;
 import java.sql.Timestamp;
 import java.text.DateFormat;
 import java.text.ParseException;
@@ -19,7 +19,7 @@ import static com.mooctest.crowd.site.data.vo.CrowdTestProjectVO.getDistanceTime
  * @Date: 2019.7.15 20:36
  */
 @Data
-public class CrowdTaskVO {
+public class CrowdTaskVO implements Serializable {
 
     private long id;
     private String projectId;
@@ -81,7 +81,7 @@ public class CrowdTaskVO {
                 this.time_interval=times[1]+"小时前发布";
             }else if(times[2]>0){
                 this.time_interval=times[2]+"分钟前发布";
-            }else{
+            }else if(times[3]>0){
                 this.time_interval=times[3]+"秒前发布";
             }
         } catch (ParseException e) {

+ 16 - 15
site/src/main/java/com/mooctest/crowd/site/data/vo/CrowdTestProjectVO.java

@@ -48,11 +48,11 @@ public class CrowdTestProjectVO {
     private int isDeleted;
     private int joinCount;
     private Timestamp createTime;
-    private  String  time_interval;
+    private String time_interval;
 
-    public  CrowdTestProjectVO(CrowdTestProject crowdTestProject) {
-        id=crowdTestProject.getId();
-        code=crowdTestProject.getCode();
+    public CrowdTestProjectVO(CrowdTestProject crowdTestProject) {
+        id = crowdTestProject.getId();
+        code = crowdTestProject.getCode();
         name = crowdTestProject.getName();
         userId = crowdTestProject.getUserId();
         regionalManagerId = crowdTestProject.getRegionalManagerId();
@@ -78,23 +78,24 @@ public class CrowdTestProjectVO {
         createTime = crowdTestProject.getCreateTime();
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {
-            Date date = df.parse(df.format(crowdTestProject.getCreateTime()));
+            Date date = crowdTestProject.getCreateTime();
             long[] times = getDistanceTimes(date);
-            if(times[0]>0){
-                this.time_interval=times[0]+"天前发布";
-            }else if(times[1]>0){
-                this.time_interval=times[1]+"小时前发布";
-            }else if(times[2]>0){
-                this.time_interval=times[2]+"分钟前发布";
-            }else{
-                this.time_interval=times[3]+"秒前发布";
+            if (times[0] > 0) {
+                this.time_interval = times[0] + "天前发布";
+            } else if (times[1] > 0) {
+                this.time_interval = times[1] + "小时前发布";
+            } else if (times[2] > 0) {
+                this.time_interval = times[2] + "分钟前发布";
+            } else if (times[3] > 0) {
+                this.time_interval = times[3] + "秒前发布";
             }
-        } catch (ParseException e) {
+        } catch (Exception e) {
             e.printStackTrace();
         }
 
 
     }
+
     public static long[] getDistanceTimes(Date date) {
         long day = 0;
         long hour = 0;
@@ -105,7 +106,7 @@ public class CrowdTestProjectVO {
         day = diff / (24 * 60 * 60 * 1000);
         hour = (diff / (60 * 60 * 1000) - day * 24);
         min = ((diff / (60 * 1000)) - day * 24 * 60 - hour * 60);
-        sec = (diff/1000-day*24*60*60-hour*60*60-min*60);
+        sec = (diff / 1000 - day * 24 * 60 * 60 - hour * 60 * 60 - min * 60);
         long[] times = {day, hour, min, sec};
         return times;
     }

+ 3 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/EvolutionAgencyVO.java

@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
+
 /**
  * @Author: xuexb
  * @Date: 2019.7.17 10:12
@@ -12,7 +14,7 @@ import lombok.NoArgsConstructor;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class EvolutionAgencyVO {
+public class EvolutionAgencyVO implements Serializable {
     private Long id;
     private Long userId;
     private String logo;

+ 7 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/FieldVO.java

@@ -1,14 +1,20 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.Field;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
 
 /**
  * @author guochao
  * @date 2019/7/6 17:54
  */
 @Data
-public class FieldVO {
+@NoArgsConstructor
+@AllArgsConstructor
+public class FieldVO implements Serializable {
     private String code;
     private String name;
 

+ 7 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/PartnerVO.java

@@ -1,14 +1,20 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.Partner;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
 
 /**
  * @author guochao
  * @date 2019/7/6 17:54
  */
 @Data
-public class PartnerVO {
+@NoArgsConstructor
+@AllArgsConstructor
+public class PartnerVO implements Serializable {
     private Long id;
     private String name;
     private String imageUrl;

+ 7 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/ResourceVO.java

@@ -1,14 +1,20 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.Resource;
+import lombok.AllArgsConstructor;
 import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
 
 /**
  * @author guochao
  * @date 2019/7/6 17:54
  */
 @Data
-public class ResourceVO {
+@NoArgsConstructor
+@AllArgsConstructor
+public class ResourceVO implements Serializable {
     private String code;
     private String name;
 

+ 3 - 2
site/src/main/java/com/mooctest/crowd/site/data/vo/TechnicalArticlesVO.java

@@ -1,7 +1,6 @@
 package com.mooctest.crowd.site.data.vo;
 
 import com.mooctest.crowd.domain.domainobject.TechnicalArticles;
-import com.mooctest.crowd.domain.model.TechnicalArticlesPO;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
@@ -11,6 +10,7 @@ import java.text.ParseException;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 
+
 @Data
 @NoArgsConstructor
 public class TechnicalArticlesVO {
@@ -36,7 +36,7 @@ public class TechnicalArticlesVO {
         this.publicTime=project.getPublicTime();
         DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
         try {
-            Date date = df.parse(df.format(project.getPublicTime()));
+            Date date =  df.parse(df.format(project.getPublicTime()));
             long[] times = getDistanceTimes(date);
             if(times[0]>0){
                 this.time_interval=times[0]+"天前发布";
@@ -57,6 +57,7 @@ public class TechnicalArticlesVO {
         long min = 0;
         long sec = 0;
         long diff;
+
         diff = System.currentTimeMillis() - date.getTime();
         day = diff / (24 * 60 * 60 * 1000);
         hour = (diff / (60 * 60 * 1000) - day * 24);

+ 3 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/TestTypeVO.java

@@ -5,6 +5,8 @@ import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 
+import java.io.Serializable;
+
 /**
  * @author guochao
  * @date 2019/7/6 17:54
@@ -12,7 +14,7 @@ import lombok.NoArgsConstructor;
 @Data
 @NoArgsConstructor
 @AllArgsConstructor
-public class TestTypeVO {
+public class TestTypeVO implements Serializable {
     private String code;
     private String name;
 

+ 4 - 1
site/src/main/java/com/mooctest/crowd/site/data/vo/UserVO.java

@@ -3,10 +3,12 @@ package com.mooctest.crowd.site.data.vo;
 import com.mooctest.crowd.domain.domainobject.Account;
 import com.mooctest.crowd.domain.domainobject.User;
 import com.mooctest.crowd.domain.model.UserPO;
+import lombok.AllArgsConstructor;
 import lombok.Data;
 import lombok.NoArgsConstructor;
 import org.springframework.beans.BeanUtils;
 
+import java.io.Serializable;
 import java.sql.Date;
 
 /**
@@ -15,7 +17,8 @@ import java.sql.Date;
  */
 @Data
 @NoArgsConstructor
-public class UserVO {
+@AllArgsConstructor
+public class UserVO implements Serializable {
     private Long id;
     private String name;
     private String userName;

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/mediator/ViewMediator.java

@@ -7,6 +7,7 @@ import com.mooctest.crowd.domain.exception.BadRequestException;
 import com.mooctest.crowd.domain.exception.PasswordErrorException;
 import com.mooctest.crowd.domain.model.PersonalAuthenticationPO;
 import com.mooctest.crowd.site.data.vo.*;
+import org.codehaus.jettison.json.JSONException;
 import org.springframework.data.domain.Pageable;
 import com.mooctest.crowd.site.command.LoginCommand;
 import com.mooctest.crowd.site.command.RegisterCommand;
@@ -82,7 +83,7 @@ public interface ViewMediator {
 
     BankCardDTO getBankCard(long userId);
 
-    BankCardDTO addBankCard(long userId,BankCardVO bankCardVO);
+    BankCardDTO addBankCard(long userId,BankCardVO bankCardVO) throws JSONException;
 
     BankCardDTO deleteBankCard(long id,long userId);
 

+ 54 - 27
site/src/main/java/com/mooctest/crowd/site/mediator/impl/WebMediatorImpl.java

@@ -19,12 +19,15 @@ import com.mooctest.crowd.site.data.enums.RoleType;
 import com.mooctest.crowd.site.data.vo.*;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import lombok.extern.slf4j.Slf4j;
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.domain.PageRequest;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Component;
+import org.springframework.web.client.RestTemplate;
 
 import java.util.*;
 import java.util.stream.Collectors;
@@ -136,19 +139,24 @@ public class WebMediatorImpl implements ViewMediator {
         Pageable pageable = PageRequest.of(0, 3);
         int top = 3;
         //获取热门众测
-        List<ApplicationTypeVO> applicationTypeRanks = projectDao.findTotalCountOfApplicationType(pageable).stream().map(rankInfos -> {
+        List<ApplicationTypeVO> applicationTypeRank = projectDao.findTotalCountOfApplicationType(pageable).stream().map(rankInfos -> {
             ApplicationType applicationType = commonRepo.getApplicationTypeByAppCode(rankInfos.getCode());
             ApplicationTypeVO applicationTypeVO = new ApplicationTypeVO(applicationType);
             applicationTypeVO.setCount(rankInfos.getCount());
             return applicationTypeVO;
         }).filter(Objects::nonNull).collect(Collectors.toList());
+        List<ApplicationTypeVO> applicationTypeRanks = new ArrayList<>();
         if (applicationTypeRanks.size() > top) {
-            applicationTypeRanks = applicationTypeRanks.subList(0, top);
+            for(int i = 0; i < top; i++){
+                applicationTypeRanks.add(applicationTypeRank.get(i));
+            }
+        }else{
+            applicationTypeRanks = applicationTypeRank;
         }
 
         //获取机构排名
         String agencyName = agencyDao.findById(Long.parseLong(agencyId)).get().getEvaluationAgencyName();
-        List<EvolutionAgencyVO> agencyRanks = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
+        List<EvolutionAgencyVO> agencyRank = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
             EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
             if (agency != null && !agency.getEvaluationAgencyName().equals(agencyName)) {
                 EvolutionAgencyVO agencyVO = new EvolutionAgencyVO();
@@ -161,12 +169,17 @@ public class WebMediatorImpl implements ViewMediator {
             }
             return null;
         }).filter(Objects::nonNull).collect(Collectors.toList());
-        if (agencyRanks.size() > top) {
-            agencyRanks = agencyRanks.subList(0, top);
+        List<EvolutionAgencyVO> agencyRanks = new ArrayList<>();
+        if (agencyRank.size() > top) {
+            for(int i = 0; i < top; i++){
+                agencyRanks.add(agencyRank.get(i));
+            }
+        }else{
+            agencyRanks = agencyRank;
         }
 
         //获取众测人员排名
-        List<UserVO> userRanks = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
+        List<UserVO> userRank = taskToUserDao.findTotalCountOfUser().stream().map(rankInfo -> {
             EvaluationAgencyPO agency = agencyDao.findByUserId(rankInfo.getEntityId());
             if (agency != null && agency.getEvaluationAgencyName().equals(agencyName)) {
                 User user = userRepo.getByID(agency.getUserId());
@@ -176,16 +189,27 @@ public class WebMediatorImpl implements ViewMediator {
             }
             return null;
         }).filter(Objects::nonNull).collect(Collectors.toList());
-        if (userRanks.size() > top) {
-            userRanks = userRanks.subList(0, top);
+        List<UserVO> userRanks = new ArrayList<>();
+        if (userRank.size() > top) {
+            for(int i = 0; i < top; i++){
+                userRanks.add(userRank.get(i));
+            }
+        }else{
+            userRanks = userRank;
         }
 
         // 获取大赛信息
         List<Competition> competitionList = commonRepo.getAllCompetition();
+        List<Competition> competitionLists = new ArrayList<>();
         if (competitionList.size() > top) {
-            competitionList = competitionList.subList(0, top);
+            for(int i = 0; i < top; i++){
+                competitionLists.add(competitionList.get(i));
+            }
+        }else{
+            competitionLists = competitionList;
         }
-        List<CompetitionVO> competitionVOS = competitionList.stream().map(competition -> {
+
+        List<CompetitionVO> competitionVOS = competitionLists.stream().map(competition -> {
             CompetitionVO competitionVO = new CompetitionVO(competition);
             return competitionVO;
         }).sorted(Comparator.comparing(CompetitionVO::getStartTime).reversed()).collect(Collectors.toList());
@@ -341,7 +365,7 @@ public class WebMediatorImpl implements ViewMediator {
                 CrowdProjectVO projectVO = new CrowdProjectVO(project);
                 List<CrowdTestTaskPO> tasksOfProject = taskDao.findByCrowdTestProjectCodeAndIsDeleted(project.getCode(), DeletedStatus.isNotDeleted);
                 if (tasksOfProject != null && tasksOfProject.stream().anyMatch(task -> task.getStatus() == CrowdTestTaskStatus.HAS_COMMITED)) {
-                    log.info("\n\n需要处理!!!\n\n");
+//                    log.info("\n\n需要处理!!!\n\n");
                     projectVO.setNeedHandle(true);
                 }
                 return projectVO;
@@ -763,16 +787,15 @@ public class WebMediatorImpl implements ViewMediator {
     @Override
     public UserDTO updateInformation(long userId, UserVO userVO) {
         Optional<UserPO> userPO = userDao.findById(userId);
-        userPO.get().setUnit(userVO.getUnit());
-        userPO.get().setGender(userVO.getGender());
-        userPO.get().setBirthday(userVO.getBirthday());
-        userPO.get().setProvince(userVO.getProvince());
-        userPO.get().setCity(userVO.getCity());
-        userPO.get().setCounty(userVO.getCounty());
-        userPO.get().setDetailedAddress(userVO.getDetailedAddress());
-        userPO.get().setPersonalCompetence(userVO.getPersonalCompetence());
-        userDao.save(userPO.get());
-        this.getInformation(userId);
+            userPO.get().setUnit(userVO.getUnit());
+            userPO.get().setGender(userVO.getGender());
+            userPO.get().setBirthday(userVO.getBirthday());
+            userPO.get().setProvince(userVO.getProvince());
+            userPO.get().setCity(userVO.getCity());
+            userPO.get().setCounty(userVO.getCounty());
+            userPO.get().setDetailedAddress(userVO.getDetailedAddress());
+            userPO.get().setPersonalCompetence(userVO.getPersonalCompetence());
+            userDao.save(userPO.get());
         return this.getInformation(userId);
     }
 
@@ -835,11 +858,11 @@ public class WebMediatorImpl implements ViewMediator {
         bankCardDao.findByUserIdAndIsDeleted(userId,DeletedStatus.isNotDeleted).forEach(bankCardPO ->{
             BankCardVO bankCardVO = new BankCardVO();
             bankCardVO.setId(bankCardPO.getId());
-            bankCardVO.setName(bankCardPO.getName());
             bankCardVO.setUser(bankCardPO.getUser());
             bankCardVO.setNumber(bankCardPO.getNumber());
             Optional<BankLogoPO> bankLogo=bankLogoDao.findByCode(bankCardPO.getCode());
-            bankCardVO.setCode(bankLogo.get().getLogoUrl());
+            bankCardVO.setLogoUrl(bankLogo.get().getLogoUrl());
+            bankCardVO.setName(bankLogo.get().getName());
             bankCardVOList.add(bankCardVO);
         });
         List<BankCardVO> results = bankCardVOList.stream().distinct().collect(Collectors.toList());
@@ -848,17 +871,21 @@ public class WebMediatorImpl implements ViewMediator {
     }
 
     @Override
-    public BankCardDTO addBankCard(long userId, BankCardVO bankCardVO) {
+    public BankCardDTO addBankCard(long userId, BankCardVO bankCardVO) throws JSONException {
         BankCardPO bankCardPO=new BankCardPO();
-        bankCardPO.setName(bankCardVO.getName());
+        String bankNo=bankCardVO.getNumber();
+        String url = "https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardNo="+bankNo+"&cardBinCheck=true";
+        RestTemplate restTemplate = new RestTemplate();
+        String result = restTemplate.getForObject(url,String.class);
+        JSONObject json = new JSONObject(result);
+        String bank = String.valueOf(json.get("bank"));
         bankCardPO.setUser(bankCardVO.getUser());
         bankCardPO.setNumber(bankCardVO.getNumber());
-        bankCardPO.setCode(bankCardVO.getCode());
+        bankCardPO.setCode(bank);
         bankCardPO.setUserId(userId);
         bankCardDao.save(bankCardPO);
         return this.getBankCard(userId);
     }
-
     @Override
     public BankCardDTO deleteBankCard(long id, long userId) {
         Optional<BankCardPO> bankCardPO=bankCardDao.findById(id);

+ 1 - 2
site/src/main/java/com/mooctest/crowd/site/service/CommonService.java

@@ -10,7 +10,6 @@ import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
 @Service
@@ -19,7 +18,7 @@ public interface CommonService {
 
     MyCrowdDTO getPersonCrowd(Long userId);
 
-    IndexInfoDTO getIndexInfos(HttpServletRequest request);
+    IndexInfoDTO getIndexInfos(Long userId);
 
     IndexPageDTO getIndexPageInfo(Pageable pageable, Map<String, String> extraCondition, String keyword, int deletedStatus);
 

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/service/PersonalDataService.java

@@ -6,6 +6,7 @@ import com.mooctest.crowd.site.data.dto.UserDTO;
 import com.mooctest.crowd.site.data.vo.BankCardVO;
 import com.mooctest.crowd.site.data.vo.QualificationVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
+import org.codehaus.jettison.json.JSONException;
 
 
 public interface PersonalDataService {
@@ -23,7 +24,7 @@ public interface PersonalDataService {
 
     BankCardDTO getBankCard(long userId);
 
-    BankCardDTO addBankCard(long userId,BankCardVO bankCardVO);
+    BankCardDTO addBankCard(long userId,BankCardVO bankCardVO) throws JSONException;
 
     BankCardDTO deleteBankCard(long id,long userId);
 }

+ 6 - 3
site/src/main/java/com/mooctest/crowd/site/service/impl/CommonServiceImpl.java

@@ -13,11 +13,11 @@ import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.CommonService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Qualifier;
+import org.springframework.cache.annotation.Cacheable;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Pageable;
 import org.springframework.stereotype.Service;
 
-import javax.servlet.http.HttpServletRequest;
 import java.util.Map;
 
 @Service
@@ -38,6 +38,9 @@ public class CommonServiceImpl implements CommonService {
     @Autowired
     private CommonRepo commonRepo;
 
+//    @Autowired
+//    private CacheUtil cacheUtil;
+
     @Override
     public IndexDTO getIndexInfo() {
         return viewMediator.renderIndex();
@@ -49,9 +52,9 @@ public class CommonServiceImpl implements CommonService {
     }
 
     @Override
-    public IndexInfoDTO getIndexInfos(HttpServletRequest request) {
+    @Cacheable(value = "userCache",key = "#userId")
+    public IndexInfoDTO getIndexInfos(Long userId){
         IndexInfoDTO indexInfoDTO = viewMediator.renderIndexInfos();
-//        request.getSession().setAttribute("indexInfo", indexInfoDTO);
         return indexInfoDTO;
     }
 

+ 2 - 1
site/src/main/java/com/mooctest/crowd/site/service/impl/PersonalDataServiceImpl.java

@@ -8,6 +8,7 @@ import com.mooctest.crowd.site.data.vo.QualificationVO;
 import com.mooctest.crowd.site.data.vo.UserVO;
 import com.mooctest.crowd.site.mediator.ViewMediator;
 import com.mooctest.crowd.site.service.PersonalDataService;
+import org.codehaus.jettison.json.JSONException;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -53,7 +54,7 @@ public class PersonalDataServiceImpl implements PersonalDataService {
     }
 
     @Override
-    public BankCardDTO addBankCard(long userId, BankCardVO bankCardVO) {
+    public BankCardDTO addBankCard(long userId, BankCardVO bankCardVO) throws JSONException {
         return viewMediator.addBankCard(userId,bankCardVO);
     }
 

+ 46 - 0
site/src/main/java/com/mooctest/crowd/site/util/CacheUtil.java

@@ -0,0 +1,46 @@
+package com.mooctest.crowd.site.util;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+import com.mooctest.crowd.site.data.dto.IndexInfoDTO;
+import com.mooctest.crowd.site.mediator.ViewMediator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.servlet.http.HttpSession;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Created on 2018/10/19
+ */
+@Component
+public class CacheUtil {
+
+    @Autowired
+    private ViewMediator viewMediator;
+
+    @Value("${cache.expire.duration}")
+    long expireDuration;
+
+    private Cache<HttpSession, IndexInfoDTO> indexInfoCache;
+
+    @PostConstruct
+    private void init(){
+      indexInfoCache = CacheBuilder
+                .newBuilder()
+                .maximumSize(1000)
+                .expireAfterAccess(expireDuration, TimeUnit.MINUTES)
+                .build();
+    }
+
+    public IndexInfoDTO getIndexInfoCache(HttpSession session) throws ExecutionException {
+        return indexInfoCache.get(session, () -> viewMediator.renderIndexInfos());
+    }
+
+    public void setIndexInfoCache(HttpSession session, IndexInfoDTO indexInfoDTO){
+        indexInfoCache.put(session, indexInfoDTO);
+    }
+}

+ 8 - 1
site/src/main/resources/application.yml

@@ -54,12 +54,18 @@ oss:
 #  service:
 #    baseUrl: http://111.231.143.6:8081
 
+cache:
+  expire:
+    duration: 7200
+
 agency: 7
+
 ---
 spring:
   profiles: dev
   datasource:
     url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+
     username: mooctest
     password: secr3t!
   redis:
@@ -84,7 +90,7 @@ website:
 spring:
   profiles: dev-localhost
   datasource:
-    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+    url: jdbc:mysql://101.37.175.111:3306/crowd-test-service?useSSL=false&useUnicode=yes&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
     username: mooctest
     password: secr3t!
   redis:
@@ -110,6 +116,7 @@ spring:
   profiles: dev-pre
   datasource:
     url: jdbc:mysql://101.37.175.111:3306/crowd-test-service-pre?useSSL=false&useUnicode=yes&characterEncoding=UTF-8
+
     username: mooctest
     password: secr3t!
   redis:

Bu fark içinde çok fazla dosya değişikliği olduğu için bazı dosyalar gösterilmiyor