WANG 6 yıl önce
ebeveyn
işleme
f5167d3115

+ 6 - 2
examcloud-task-api-provider/src/main/java/cn/com/qmth/examcloud/task/api/controller/CopyExamStudentController.java

@@ -1,6 +1,7 @@
 package cn.com.qmth.examcloud.task.api.controller;
 
 import java.util.List;
+import java.util.Optional;
 
 import javax.transaction.Transactional;
 
@@ -65,8 +66,11 @@ public class CopyExamStudentController extends ControllerSupport {
 		ExamBean exam2 = examCloudService.getExam(req).getExamBean();
 
 		CopyExamStudentPK pk = new CopyExamStudentPK(examId1, examId2);
-		CopyExamStudentEntity one = copyExamStudentRepo.findOne(pk);
-
+		 Optional<CopyExamStudentEntity> opt = copyExamStudentRepo.findById(pk);
+			CopyExamStudentEntity one =null;
+		 if (opt.isPresent()) {
+			 one=opt.get();
+		}
 		if (null != one && (!one.getStatus().equals(CopyExamStudentStatus.COMPLETE))) {
 			throw new StatusException("T-620001", "复制中,请勿重复操作");
 		}

+ 14 - 7
examcloud-task-api-provider/src/main/java/cn/com/qmth/examcloud/task/api/controller/ExamStudentImportController.java

@@ -3,6 +3,7 @@ package cn.com.qmth.examcloud.task.api.controller;
 import java.io.File;
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Optional;
 
 import javax.persistence.criteria.Predicate;
 import javax.transaction.Transactional;
@@ -29,8 +30,8 @@ import com.google.common.collect.Lists;
 import cn.com.qmth.examcloud.api.commons.exchange.PageInfo;
 import cn.com.qmth.examcloud.api.commons.security.bean.User;
 import cn.com.qmth.examcloud.commons.util.DateUtil;
-import cn.com.qmth.examcloud.commons.util.PathUtil;
 import cn.com.qmth.examcloud.commons.util.DateUtil.DatePatterns;
+import cn.com.qmth.examcloud.commons.util.PathUtil;
 import cn.com.qmth.examcloud.core.basic.api.OrgCloudService;
 import cn.com.qmth.examcloud.core.basic.api.bean.OrgBean;
 import cn.com.qmth.examcloud.core.basic.api.request.GetOrgReq;
@@ -91,7 +92,7 @@ public class ExamStudentImportController extends ControllerSupport {
 		String suffix = originalFilename.substring(originalFilename.indexOf("."));
 		long batchId = System.currentTimeMillis();
 		String name = new StringBuilder().append(rootOrgId).append("_").append(examId).append("_")
-				.append(DateUtil.getNow(DatePatterns.YYYYMMDDHHMM)).toString();
+				.append(DateUtil.now(DatePatterns.YYYYMMDDHHMM)).toString();
 
 		String destFileName = name + suffix;
 		String resultFileName = name + ".txt";
@@ -133,7 +134,7 @@ public class ExamStudentImportController extends ControllerSupport {
 			return cb.and(predicates.toArray(new Predicate[predicates.size()]));
 		};
 
-		Pageable pageable = new PageRequest(curPage, pageSize, Sort.Direction.DESC, "creationTime");
+		Pageable pageable = PageRequest.of(curPage, pageSize, Sort.Direction.DESC, "creationTime");
 		Page<ExamStudentImportEntity> list = examStudentImportRepo.findAll(specification, pageable);
 
 		List<ExamStudentImportDomain> ret = Lists.newArrayList();
@@ -179,8 +180,11 @@ public class ExamStudentImportController extends ControllerSupport {
 	@ApiOperation(value = "下载报告")
 	@GetMapping("/getReports/{id}")
 	public void importFileTemplate(@PathVariable Long id) {
-
-		ExamStudentImportEntity entity = examStudentImportRepo.findOne(id);
+		ExamStudentImportEntity entity = null;
+		Optional<ExamStudentImportEntity> opt = examStudentImportRepo.findById(id);
+		if (opt.isPresent()) {
+			entity = opt.get();
+		}
 		String resultFilePath = entity.getResultFilePath();
 
 		if (!isSuperAdmin()) {
@@ -204,8 +208,11 @@ public class ExamStudentImportController extends ControllerSupport {
 	@ApiOperation(value = "下载导入文件")
 	@GetMapping("/getUploadedFile/{id}")
 	public void getUploadedFile(@PathVariable Long id) {
-
-		ExamStudentImportEntity entity = examStudentImportRepo.findOne(id);
+		ExamStudentImportEntity entity = null;
+		Optional<ExamStudentImportEntity> opt = examStudentImportRepo.findById(id);
+		if (opt.isPresent()) {
+			entity = opt.get();
+		}
 		String fileName = entity.getFileName();
 
 		if (!isSuperAdmin()) {

+ 2 - 2
examcloud-task-service/src/main/java/cn/com/qmth/examcloud/task/service/job/ExamStudentImportParsingFileTask.java

@@ -179,13 +179,13 @@ public class ExamStudentImportParsingFileTask extends AbstractTask {
 				fullSet.add(key);
 			}
 			if (0 == i % 100) {
-				examStudentTempRepo.save(list);
+				examStudentTempRepo.saveAll(list);
 
 				list = Lists.newArrayList();
 			}
 		}
 
-		examStudentTempRepo.save(list);
+		examStudentTempRepo.saveAll(list);
 		sb.append("====================数据规格错误数据\n");
 		for (Map<String, Object> cur : failRecords) {
 			sb.append("line ").append(cur.get("lineNum")).append(cur.get("msg")).append("\n");

+ 26 - 74
examcloud-task-starter/src/main/java/cn/com/qmth/examcloud/task/starter/TaskApp.java

@@ -1,86 +1,48 @@
 package cn.com.qmth.examcloud.task.starter;
 
-import org.slf4j.MDC;
-import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.boot.autoconfigure.domain.EntityScan;
-import org.springframework.boot.autoconfigure.web.MultipartAutoConfiguration;
-import org.springframework.cloud.client.loadbalancer.LoadBalanced;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
 import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
 import org.springframework.data.jpa.repository.config.EnableJpaAuditing;
 import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
-import org.springframework.data.redis.connection.RedisConnectionFactory;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
-import org.springframework.data.redis.serializer.StringRedisSerializer;
-import org.springframework.scheduling.annotation.EnableScheduling;
 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
-import org.springframework.web.client.RestTemplate;
-import org.springframework.web.multipart.MultipartResolver;
-import org.springframework.web.multipart.commons.CommonsMultipartResolver;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
-import com.fasterxml.jackson.annotation.JsonAutoDetect;
-import com.fasterxml.jackson.annotation.PropertyAccessor;
-import com.fasterxml.jackson.databind.ObjectMapper;
+import cn.com.qmth.examcloud.web.bootstrap.AppBootstrap;
 
-import cn.com.qmth.examcloud.commons.logging.ExamCloudLog;
-import cn.com.qmth.examcloud.commons.logging.ExamCloudLogFactory;
-import cn.com.qmth.examcloud.commons.logging.SLF4JImpl;
-import cn.com.qmth.examcloud.web.boot.ExamCloudApp;
-import cn.com.qmth.examcloud.web.redis.RedisClient;
-import cn.com.qmth.examcloud.web.redis.RedisClientImpl;
-import cn.com.qmth.examcloud.web.support.CustomResponseErrorHandler;
-
-@SpringBootApplication(scanBasePackages = {"cn.com.qmth"})
-@EnableJpaRepositories(basePackages = {"cn.com.qmth"})
-@EntityScan(basePackages = {"cn.com.qmth"})
+@SpringBootApplication
+@Configuration
+@EnableAutoConfiguration
 @EnableJpaAuditing
+@EnableTransactionManagement
 @EnableEurekaClient
-@EnableScheduling
-@EnableAutoConfiguration(exclude = {MultipartAutoConfiguration.class})
+@EnableDiscoveryClient
+@ComponentScan(basePackages = {"cn.com.qmth"})
+@EntityScan(basePackages = {"cn.com.qmth.examcloud.task.dao.entity"})
+@EnableJpaRepositories(basePackages = {"cn.com.qmth.examcloud.task.dao"})
 public class TaskApp {
 
-	private static final ExamCloudLog LOG = ExamCloudLogFactory.getLog(TaskApp.class);
-
-	public static void main(String[] args) throws Exception {
-		if (LOG instanceof SLF4JImpl) {
-			MDC.put("TRACE_ID", Thread.currentThread().getName());
+	static {
+		String runtimeLevel = System.getProperty("log.commonLevel");
+		if (null == runtimeLevel) {
+			System.setProperty("log.commonLevel", "DEBUG");
 		}
-
-		ExamCloudApp.run(TaskApp.class, "task", args);
-	}
-
-	@Bean
-	@LoadBalanced
-	public RestTemplate restTemplate() {
-		RestTemplate restTemplate = new RestTemplate();
-		restTemplate.setErrorHandler(new CustomResponseErrorHandler());
-		return restTemplate;
+		System.setProperty("hibernate.dialect.storage_engine", "innodb");
 	}
 
-	@Bean
-	public RedisTemplate<String, Object> redisTemplate(
-			RedisConnectionFactory redisConnectionFactory) {
-		RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
-		redisTemplate.setConnectionFactory(redisConnectionFactory);
-		Jackson2JsonRedisSerializer<?> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(
-				Object.class);
-		ObjectMapper objectMapper = new ObjectMapper();
-		objectMapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
-		objectMapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
-		jackson2JsonRedisSerializer.setObjectMapper(objectMapper);
-		redisTemplate.setValueSerializer(jackson2JsonRedisSerializer);
-		redisTemplate.setKeySerializer(new StringRedisSerializer());
-		redisTemplate.afterPropertiesSet();
-		return redisTemplate;
-	}
-
-	@Bean
-	@Autowired
-	public RedisClient redisClient(RedisTemplate<String, Object> redisTemplate) {
-		return new RedisClientImpl(redisTemplate);
+	/**
+	 * main
+	 *
+	 * @author WANGWEI
+	 * @param args
+	 */
+	public static void main(String[] args) {
+		AppBootstrap.run(TaskApp.class, args);
 	}
 
 	@Bean(name = "schedulerFactoryBean")
@@ -88,14 +50,4 @@ public class TaskApp {
 		return new SchedulerFactoryBean();
 	}
 
-	@Bean(name = "multipartResolver")
-	public MultipartResolver multipartResolver() {
-		CommonsMultipartResolver resolver = new CommonsMultipartResolver();
-		resolver.setDefaultEncoding("UTF-8");
-		resolver.setResolveLazily(true);
-		resolver.setMaxInMemorySize(2);
-		resolver.setMaxUploadSize(200 * 1024 * 1024);
-		return resolver;
-	}
-
 }

+ 0 - 39
examcloud-task-starter/src/main/java/cn/com/qmth/examcloud/task/starter/config/AppSelfInspection.java

@@ -1,39 +0,0 @@
-package cn.com.qmth.examcloud.task.starter.config;
-
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.ApplicationArguments;
-import org.springframework.boot.ApplicationRunner;
-import org.springframework.core.annotation.Order;
-import org.springframework.stereotype.Component;
-
-import cn.com.qmth.examcloud.web.support.RemoteProcedureCallTester;
-
-/**
- * 应用自检
- *
- * @author WANGWEI
- * @date 2018年6月21日
- * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
- */
-@Component
-@Order(1)
-public class AppSelfInspection implements ApplicationRunner {
-
-	@Autowired
-	private RemoteProcedureCallTester remoteCallTester;
-
-	/**
-	 * 自检
-	 *
-	 * @author WANGWEI
-	 */
-	private void inspect() {
-		remoteCallTester.testRestTemplate("EC-CORE-BASIC", "EC-CORE-EXAMWORK");
-	}
-
-	@Override
-	public void run(ApplicationArguments args) throws Exception {
-		inspect();
-	}
-
-}

+ 0 - 115
examcloud-task-starter/src/main/java/cn/com/qmth/examcloud/task/starter/config/DefaultWebMvcConfigurerAdapter.java

@@ -1,115 +0,0 @@
-package cn.com.qmth.examcloud.task.starter.config;
-
-import java.util.List;
-import java.util.Set;
-
-import org.apache.commons.collections.CollectionUtils;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
-import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
-
-import com.google.common.collect.Sets;
-
-import cn.com.qmth.examcloud.api.commons.security.bean.Role;
-import cn.com.qmth.examcloud.api.commons.security.bean.User;
-import cn.com.qmth.examcloud.api.commons.security.enums.RoleMeta;
-import cn.com.qmth.examcloud.commons.util.PathUtil;
-import cn.com.qmth.examcloud.commons.util.PropertiesUtil;
-import cn.com.qmth.examcloud.commons.util.RegExpUtil;
-import cn.com.qmth.examcloud.web.interceptor.FirstInterceptor;
-import cn.com.qmth.examcloud.web.redis.RedisClient;
-import cn.com.qmth.examcloud.web.security.RequestPermissionInterceptor;
-import cn.com.qmth.examcloud.web.security.SpringCloudInterceptor;
-
-/**
- * 默认WebMvcConfigurer
- *
- * @author WANGWEI
- * @date 2018年5月22日
- * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
- */
-@Configuration
-public class DefaultWebMvcConfigurerAdapter extends WebMvcConfigurerAdapter {
-
-	@Autowired
-	RedisClient redisClient;
-
-	static {
-		PropertiesUtil.configure(PathUtil.getResoucePath("security-mapping.properties"));
-	}
-
-	@Override
-	public void addInterceptors(InterceptorRegistry registry) {
-		registry.addInterceptor(new FirstInterceptor()).addPathPatterns("/**");
-
-		SpringCloudInterceptor springCloudInterceptor = new SpringCloudInterceptor();
-		springCloudInterceptor.setRedisClient(redisClient);
-		registry.addInterceptor(springCloudInterceptor).addPathPatterns("/**");
-
-		RequestPermissionInterceptor requestPermissionInterceptor = getRequestPermissionInterceptor();
-		requestPermissionInterceptor.configure("security-exclusions.conf");
-		registry.addInterceptor(requestPermissionInterceptor).addPathPatterns("/**");
-
-		super.addInterceptors(registry);
-	}
-
-	@Bean
-	public RequestPermissionInterceptor getRequestPermissionInterceptor() {
-		return new RequestPermissionInterceptor(redisClient) {
-
-			@Override
-			public boolean hasPermission(String mappingPath, User user) {
-				List<Role> roleList = user.getRoleList();
-
-				if (CollectionUtils.isEmpty(roleList)) {
-					return false;
-				}
-
-				for (Role role : roleList) {
-					if (role.getRoleCode().equals(RoleMeta.SUPER_ADMIN.name())) {
-						return true;
-					}
-				}
-
-				// 权限组集合
-				String privilegeGroups = PropertiesUtil.getString(mappingPath);
-				if (StringUtils.isBlank(privilegeGroups)) {
-					return true;
-				}
-
-				// 用户权限集合
-				Set<String> rolePrivilegeList = Sets.newHashSet();
-				Long rootOrgId = user.getRootOrgId();
-				for (Role role : roleList) {
-					String key = "$_P_" + rootOrgId + "_" + role.getRoleId();
-					String rolePrivileges = redisClient.get(key, String.class);
-
-					List<String> rpList = RegExpUtil.findAll(rolePrivileges, "\\w+");
-					rolePrivilegeList.addAll(rpList);
-				}
-
-				List<String> privilegeGroupList = RegExpUtil.findAll(privilegeGroups, "[^\\;]+");
-
-				for (String pg : privilegeGroupList) {
-					pg = pg.trim();
-					if (StringUtils.isBlank(pg)) {
-						continue;
-					}
-
-					List<String> pList = RegExpUtil.findAll(pg, "[^\\,]+");
-					if (rolePrivilegeList.containsAll(pList)) {
-						return true;
-					} else {
-						continue;
-					}
-				}
-
-				return false;
-			}
-
-		};
-	}
-}

+ 0 - 95
examcloud-task-starter/src/main/java/cn/com/qmth/examcloud/task/starter/config/JdbcTemplateHolder.java

@@ -1,95 +0,0 @@
-package cn.com.qmth.examcloud.task.starter.config;
-
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
-import javax.sql.DataSource;
-
-import org.springframework.jdbc.core.JdbcTemplate;
-
-import cn.com.qmth.examcloud.commons.util.DBUtil;
-
-/**
- * JDBC模板
- *
- * @author WANGWEI
- * @date 2018年8月3日
- * @Copyright (c) 2018-? http://qmth.com.cn All Rights Reserved.
- */
-public class JdbcTemplateHolder {
-
-	private static Map<String, JdbcTemplate> jdbcTemplates = new ConcurrentHashMap<String, JdbcTemplate>();
-
-	private static final Object LOCK = new Object();
-
-	public enum DataSourceName {
-		/**
-		 * 基础信息
-		 */
-		CORE_BASIC("$ds.core.basic"),
-		/**
-		 * 考务
-		 */
-		CORE_EXAMWORK("$ds.core.examwork"),
-		/**
-		 * 题库
-		 */
-		CORE_QUESTION("$ds.core.question"),
-		/**
-		 * 阅卷
-		 */
-		CORE_MARKING("$ds.core.marking"),
-		/**
-		 * 网考
-		 */
-		CORE_OE("$ds.core.oe");
-
-		private String configName;
-
-		private DataSourceName(String configName) {
-			this.configName = configName;
-		}
-
-		public String getConfigName() {
-			return configName;
-		}
-
-	}
-
-	/**
-	 * 启动初始化
-	 *
-	 * @author WANGWEI
-	 */
-	public static void init() {
-		// getJdbcTemplate(DataSourceName.CORE_BASIC);
-		// getJdbcTemplate(DataSourceName.CORE_EXAMWORK);
-		// getJdbcTemplate(DataSourceName.CORE_MARKING);
-		// getJdbcTemplate(DataSourceName.CORE_OE);
-		// getJdbcTemplate(DataSourceName.CORE_QUESTION);
-	}
-
-	/**
-	 * 获取 JdbcTemplate
-	 *
-	 * @author WANGWEI
-	 * @param dataSourceName
-	 * @return
-	 */
-	public static JdbcTemplate getJdbcTemplate(DataSourceName dataSourceName) {
-		JdbcTemplate jdbcTemplate = jdbcTemplates.get(dataSourceName.name());
-		if (null == jdbcTemplate) {
-			synchronized (LOCK) {
-				jdbcTemplate = jdbcTemplates.get(dataSourceName.name());
-				if (null == jdbcTemplate) {
-					DataSource dataSource = DBUtil.getDataSource(dataSourceName.getConfigName());
-					jdbcTemplate = new JdbcTemplate(dataSource);
-					jdbcTemplates.put(dataSourceName.name(), jdbcTemplate);
-				}
-			}
-		}
-
-		return jdbcTemplate;
-	}
-
-}