From ef83c6b961d431f5f73cc3d459449b3ad46394cb Mon Sep 17 00:00:00 2001 From: tianea Date: Thu, 10 Mar 2022 20:46:03 +0800 Subject: [PATCH] =?UTF-8?q?=E8=80=83=E8=AF=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/tz/platform/config/RedisConfig.java | 41 +++++++++++++++++++ tz/competition/competition-service/pom.xml | 4 ++ .../platform/competitiion/pc/biz/TeamBiz.java | 3 +- .../pc/biz/TeamTemplateImportBiz.java | 16 ++++++-- .../com/tz/platform/entity/Competition.java | 1 + .../platform/repository/CompetitionDao.java | 4 +- .../repository/CompetitionMemberDao.java | 2 + .../repository/CompetitionTaskDao.java | 1 + .../repository/CompetitionTeamDao.java | 1 + .../platform/exam/feign/biz/FeignExamBiz.java | 20 +++++++++ .../tz/platform/feign/user/IFeignUser.java | 3 ++ .../com/tz/platform/config/MyRedisConfig.java | 41 +++++++++++++++++++ .../com/tz/platform/repository/UserDao.java | 2 +- .../user/api/biz/ApiUserLoginBiz.java | 11 ++++- .../user/feign/FeignUserController.java | 5 +++ .../platform/user/feign/biz/FeignUserBiz.java | 21 ++++++++++ 16 files changed, 167 insertions(+), 9 deletions(-) create mode 100644 tz/common/common-service/src/main/java/com/tz/platform/config/RedisConfig.java create mode 100644 tz/user/user-service/src/main/java/com/tz/platform/config/MyRedisConfig.java diff --git a/tz/common/common-service/src/main/java/com/tz/platform/config/RedisConfig.java b/tz/common/common-service/src/main/java/com/tz/platform/config/RedisConfig.java new file mode 100644 index 0000000..3613632 --- /dev/null +++ b/tz/common/common-service/src/main/java/com/tz/platform/config/RedisConfig.java @@ -0,0 +1,41 @@ +package com.tz.platform.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +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; + +@Configuration +public class RedisConfig { + @Bean(name = "template") + public RedisTemplate template(RedisConnectionFactory factory) { + // 创建RedisTemplate对象 + RedisTemplate template = new RedisTemplate<>(); + // 配置连接工厂 + template.setConnectionFactory(factory); + // 定义Jackson2JsonRedisSerializer序列化对象 + Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper om = new ObjectMapper(); + // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会报异常 + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSeial.setObjectMapper(om); + StringRedisSerializer stringSerial = new StringRedisSerializer(); + // redis key 序列化方式使用stringSerial + template.setKeySerializer(stringSerial); + // redis value 序列化方式使用jackson + template.setValueSerializer(jacksonSeial); + // redis hash key 序列化方式使用stringSerial + template.setHashKeySerializer(stringSerial); + // redis hash value 序列化方式使用jackson + template.setHashValueSerializer(jacksonSeial); + template.afterPropertiesSet(); + return template; + } +} diff --git a/tz/competition/competition-service/pom.xml b/tz/competition/competition-service/pom.xml index de92584..9747ff8 100644 --- a/tz/competition/competition-service/pom.xml +++ b/tz/competition/competition-service/pom.xml @@ -24,6 +24,10 @@ com.tz user-feign + + com.tz + exam-feign + \ No newline at end of file diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java index c40c095..636d10d 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamBiz.java @@ -125,7 +125,8 @@ public class TeamBiz { private void updatePeopleCount(Long competitionId){ int peopleCount = memberDao.countByCompetitionId(competitionId); - competitionDao.updatePeopleCount(peopleCount,competitionId); + int teamCount = teamDao.countByCompetitionId(competitionId); + competitionDao.updatePeopleCount(peopleCount,teamCount,competitionId); } public Result updateTeamInfo(TeamInfoVO vo){ diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java index f3dfbb6..45e398b 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/TeamTemplateImportBiz.java @@ -8,6 +8,7 @@ import com.tz.platform.competitiion.pc.bo.TeamInfo; import com.tz.platform.entity.CompetitionMember; import com.tz.platform.entity.CompetitionTeam; import com.tz.platform.feign.user.IFeignUser; +import com.tz.platform.repository.CompetitionDao; import com.tz.platform.repository.CompetitionMemberDao; import com.tz.platform.repository.CompetitionTeamDao; import lombok.extern.slf4j.Slf4j; @@ -33,6 +34,9 @@ public class TeamTemplateImportBiz { @Autowired private CompetitionMemberDao memberDao; + @Autowired + private CompetitionDao competitionDao; + public Result excelImport(MultipartFile file,Long userNo,Long competitionId,Integer stageId){ if(competitionId==null||stageId == null){ return Result.error("大赛或赛段不能为空"); @@ -117,11 +121,9 @@ public class TeamTemplateImportBiz { } }); memberDao.saveAll(memberList); - + updatePeopleCount(competitionId); }); - - } catch (Exception e) { e.printStackTrace(); return Result.error("上传失败"); @@ -131,6 +133,13 @@ public class TeamTemplateImportBiz { return Result.success("success"); } + private void updatePeopleCount(Long competitionId){ + int peopleCount = memberDao.countByCompetitionId(competitionId); + int teamCount = teamDao.countByCompetitionId(competitionId); + competitionDao.updatePeopleCount(peopleCount,teamCount,competitionId); + } + + public Result importMember(MultipartFile file,Long userNo,Long competitionId,Integer stageId){ if(competitionId==null||stageId == null){ @@ -189,6 +198,7 @@ public class TeamTemplateImportBiz { memberList.add(member); }); memberDao.saveAll(memberList); + updatePeopleCount(competitionId); return Result.success("导入成功"); } catch (Exception e) { diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java index a6db125..b009af7 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/entity/Competition.java @@ -28,6 +28,7 @@ public class Competition { private Integer teamMaxCount; private Integer status; private Integer peopleCount; + private Integer teamCount; private boolean enableSignup; @Column(columnDefinition = "TIMESTAMP") private Date startTime; diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java index fb62cbd..1517d6c 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionDao.java @@ -18,6 +18,6 @@ public interface CompetitionDao extends JpaRepository { @Transactional @Modifying - @Query(value = "update competition set people_count =:pcount where id=:id",nativeQuery = true) - int updatePeopleCount( @Param("pcount") Integer pcount ,@Param("id") Long id); + @Query(value = "update competition set people_count =:pcount,team_count=:tcount where id=:id",nativeQuery = true) + int updatePeopleCount( @Param("pcount") Integer pcount ,@Param("tcount") Integer tcount , @Param("id") Long id); } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java index 3ef1fe9..8666ca1 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionMemberDao.java @@ -16,6 +16,8 @@ public interface CompetitionMemberDao extends JpaRepository findAllByCompetitionIdAndStageIdAndUserIdIn(Long cmpId,Integer stageId,List ids); + List findAllByCompetitionIdAndStageId(Long compId,Integer stageId); + Page findAllByCompetitionIdAndStageId(Long cmpid, Integer stageId , Pageable pageable); Page findAllByStudentNoOrName(String studentNo,String name,Pageable pageable); diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTaskDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTaskDao.java index df9a79d..61b8fba 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTaskDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTaskDao.java @@ -10,4 +10,5 @@ import java.util.List; public interface CompetitionTaskDao extends JpaRepository { CompetitionTask getById(Integer id); List findAllByCompetitionId(Long competitionId); + CompetitionTask getByCompetitionIdAndStageId(Long cmpId,Integer stageId); } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTeamDao.java b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTeamDao.java index d0015b8..2b4048b 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTeamDao.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/repository/CompetitionTeamDao.java @@ -8,4 +8,5 @@ import org.springframework.stereotype.Repository; public interface CompetitionTeamDao extends JpaRepository { CompetitionTeam getById(Integer id); CompetitionTeam getByTeamName(String teamName); + int countByCompetitionId(Long competitionId); } diff --git a/tz/exam/exam-service/src/main/java/com/tz/platform/exam/feign/biz/FeignExamBiz.java b/tz/exam/exam-service/src/main/java/com/tz/platform/exam/feign/biz/FeignExamBiz.java index 3d0ec03..d93e7e5 100644 --- a/tz/exam/exam-service/src/main/java/com/tz/platform/exam/feign/biz/FeignExamBiz.java +++ b/tz/exam/exam-service/src/main/java/com/tz/platform/exam/feign/biz/FeignExamBiz.java @@ -1,12 +1,32 @@ package com.tz.platform.exam.feign.biz; +import com.tz.platform.entity.Question; import com.tz.platform.repository.QuestionDao; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import java.util.List; +import java.util.concurrent.TimeUnit; + @Component +@Slf4j public class FeignExamBiz { @Autowired private QuestionDao questionDao; + @Autowired + private RedisTemplate> redisTemplate; + + public boolean putToCache(List ids,String key,long seconds){ + try { + List questionList = questionDao.findAllByIdIn(ids); + redisTemplate.opsForValue().set(key, questionList, seconds, TimeUnit.SECONDS); + }catch (Exception ex){ + log.info("试题预热失败:{}",ex.getMessage()); + return false; + } + return true; + } } diff --git a/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/IFeignUser.java b/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/IFeignUser.java index a6b4cab..b5b1261 100644 --- a/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/IFeignUser.java +++ b/tz/user/user-feign/src/main/java/com/tz/platform/feign/user/IFeignUser.java @@ -28,4 +28,7 @@ public interface IFeignUser { @PostMapping(value = "feign/user/listByIds") List listByIds(@RequestBody List ids); + @PostMapping(value = "feign/user/putToCache") + boolean putToCache(List ids); + } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/config/MyRedisConfig.java b/tz/user/user-service/src/main/java/com/tz/platform/config/MyRedisConfig.java new file mode 100644 index 0000000..31911f1 --- /dev/null +++ b/tz/user/user-service/src/main/java/com/tz/platform/config/MyRedisConfig.java @@ -0,0 +1,41 @@ +package com.tz.platform.config; + +import com.fasterxml.jackson.annotation.JsonAutoDetect; +import com.fasterxml.jackson.annotation.PropertyAccessor; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +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; + +@Configuration +public class MyRedisConfig { + @Bean(name = "template") + public RedisTemplate template(RedisConnectionFactory factory) { + // 创建RedisTemplate对象 + RedisTemplate template = new RedisTemplate<>(); + // 配置连接工厂 + template.setConnectionFactory(factory); + // 定义Jackson2JsonRedisSerializer序列化对象 + Jackson2JsonRedisSerializer jacksonSeial = new Jackson2JsonRedisSerializer<>(Object.class); + ObjectMapper om = new ObjectMapper(); + // 指定要序列化的域,field,get和set,以及修饰符范围,ANY是都有包括private和public + om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); + // 指定序列化输入的类型,类必须是非final修饰的,final修饰的类,比如String,Integer等会报异常 + om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); + jacksonSeial.setObjectMapper(om); + StringRedisSerializer stringSerial = new StringRedisSerializer(); + // redis key 序列化方式使用stringSerial + template.setKeySerializer(stringSerial); + // redis value 序列化方式使用jackson + template.setValueSerializer(jacksonSeial); + // redis hash key 序列化方式使用stringSerial + template.setHashKeySerializer(stringSerial); + // redis hash value 序列化方式使用jackson + template.setHashValueSerializer(jacksonSeial); + template.afterPropertiesSet(); + return template; + } +} diff --git a/tz/user/user-service/src/main/java/com/tz/platform/repository/UserDao.java b/tz/user/user-service/src/main/java/com/tz/platform/repository/UserDao.java index a99cc50..8893135 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/repository/UserDao.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/repository/UserDao.java @@ -33,7 +33,7 @@ public interface UserDao extends JpaRepository , JpaSpecificationExec User getByUsername(String username); /** - * 分布获取用户 + * 分页获取用户 * @param pageable 分页数据 * @return 一页用户 */ diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java index 762fa4a..3afa95a 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/api/biz/ApiUserLoginBiz.java @@ -16,6 +16,7 @@ import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; +import javax.annotation.Resource; import java.util.Date; import java.util.concurrent.TimeUnit; @@ -28,7 +29,7 @@ public class ApiUserLoginBiz { private LoginLogDao loginLogDao; @Autowired - private RedisTemplate redisTemplate; + private RedisTemplate template; /** * 账号密码登陆 * @param userLoginPasswordBO @@ -45,9 +46,15 @@ public class ApiUserLoginBiz { // 密码错误次数校验 + User user = null; + + user = (User) template.opsForValue().get("user_"+userLoginPasswordBO.getUsername()); // 用户校验 - User user = userDao.getByUsername(userLoginPasswordBO.getUsername()); + if(user == null){ + user = userDao.getByUsername(userLoginPasswordBO.getUsername()); + } + if (null == user) { return Result.error("账号或者密码不正确"); } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/feign/FeignUserController.java b/tz/user/user-service/src/main/java/com/tz/platform/user/feign/FeignUserController.java index 0244413..8647170 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/feign/FeignUserController.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/feign/FeignUserController.java @@ -41,4 +41,9 @@ public class FeignUserController implements IFeignUser { public List listByIds(List ids) { return feignUserBiz.findByIds(ids); } + + @Override + public boolean putToCache(List ids) { + return feignUserBiz.putToCache(ids); + } } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java b/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java index 771c14a..dada21b 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/feign/biz/FeignUserBiz.java @@ -14,17 +14,22 @@ import com.tz.platform.feign.vo.ProvinceVO; import com.tz.platform.feign.vo.StudentLevelVo; import com.tz.platform.repository.UserDao; import com.tz.platform.feign.user.vo.UserVo; +import lombok.extern.slf4j.Slf4j; import net.bytebuddy.implementation.bytecode.Throw; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Component +@Slf4j public class FeignUserBiz { + @Autowired private UserDao userDao; @@ -34,6 +39,9 @@ public class FeignUserBiz { @Autowired private IFeignStudentLevel feignStudentLevel; + @Autowired + private RedisTemplate template; + public UserVo getByUserNo(Long userNo){ User user = userDao.findById(userNo).orElse(null); if(user == null) { @@ -52,6 +60,19 @@ public class FeignUserBiz { return BeanUtils.copyProperties(userList,MemberInfo.class); } + public boolean putToCache(List ids){ + try { + List userList = userDao.findAllByIdIn(ids); + userList.forEach(user -> { + template.opsForValue().set("user_"+user.getUsername(), user, 4, TimeUnit.HOURS); + }); + }catch (Exception ex){ + log.error("用户预热失败: {}",ex.getMessage()); + return false; + } + return true; + } + public List batchSave(List list){ if(list.size()==0){ throw new BaseException("导入数据为空");