diff --git a/tz/common/common-core/pom.xml b/tz/common/common-core/pom.xml index e68741c..2fe5851 100644 --- a/tz/common/common-core/pom.xml +++ b/tz/common/common-core/pom.xml @@ -101,6 +101,13 @@ org.springframework.boot spring-boot-starter-web + + + org.jsoup + jsoup + 1.14.3 + + jakarta.persistence jakarta.persistence-api diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/CompetitionNews.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/CompetitionNews.java index fe34591..c415de1 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/CompetitionNews.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/bo/CompetitionNews.java @@ -6,4 +6,8 @@ import lombok.Data; public class CompetitionNews { private String img; private String content; + private Long createTime; + private Integer viewPoint; + private String title; + private String plainText; } diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java index dfa1532..592d163 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/JWTUtil.java @@ -17,6 +17,7 @@ public class JWTUtil { private static final String TOKEN_SECRET = "ekfyJhciOiJfkIUzI1J9"; private static final String ISSUER = "TIANZE"; public static final String USERNO = "userNo"; + public static final String USERTYPE= "userType"; public static final Long DATE = 30 * 24 * 3600 * 1000L; // 1个月 /** @@ -36,6 +37,15 @@ public class JWTUtil { } } + public static String create(Long userNo,Integer userTye,Long date){ + try { + return JWT.create().withIssuer(ISSUER).withClaim(USERNO, userNo.toString()).withClaim(USERTYPE,userTye).withExpiresAt(new Date(System.currentTimeMillis() + date)).sign(Algorithm.HMAC256(TOKEN_SECRET)); + } catch (Exception e) { + logger.error("JWT生成失败", e); + return ""; + } + } + /** * @param token * @return @@ -58,4 +68,6 @@ public class JWTUtil { return Long.valueOf(decodedJWT.getClaim(USERNO).asString()); } + public static Integer getUserType(DecodedJWT decodedJWT){ return decodedJWT.getClaim(USERTYPE).asInt();} + } diff --git a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/StrUtil.java b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/StrUtil.java index c578866..c9953a1 100644 --- a/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/StrUtil.java +++ b/tz/common/common-core/src/main/java/com/tz/platform/common/core/tools/StrUtil.java @@ -1,6 +1,9 @@ package com.tz.platform.common.core.tools; import cn.hutool.core.util.IdUtil; +import org.jsoup.Jsoup; +import org.jsoup.safety.Safelist; +import org.jsoup.safety.Whitelist; import java.util.Random; @@ -32,4 +35,14 @@ public class StrUtil { return IdUtil.simpleUUID(); } + public static String htmlToText(String htmlStr){ + String outputText = Jsoup.clean(htmlStr, Safelist.none()); + return outputText; + } + + public static void main(String[] args) { + String htmlStr = "

艺术硕士大法师地方

"; + System.out.println(StrUtil.htmlToText(htmlStr)); + } + } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionTeamController.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionTeamController.java index 4e2f257..b4fb516 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionTeamController.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/CompetitionTeamController.java @@ -4,10 +4,7 @@ import com.tz.platform.common.core.base.BaseController; import com.tz.platform.common.core.base.Result; import com.tz.platform.competitiion.pc.biz.TeamBiz; import com.tz.platform.competitiion.pc.dto.PageTeamDTO; -import com.tz.platform.competitiion.pc.vo.AddTeamMemberVO; -import com.tz.platform.competitiion.pc.vo.PageTeamVO; -import com.tz.platform.competitiion.pc.vo.TeamInfoVO; -import com.tz.platform.competitiion.pc.vo.TeamMemberVO; +import com.tz.platform.competitiion.pc.vo.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; @@ -40,4 +37,9 @@ public class CompetitionTeamController extends BaseController { public Result addTeamMember(@RequestBody AddTeamMemberVO vo){ return teamBiz.addTeamMember(vo); } + + @PostMapping(value = "addTeam") + public Result addTeam(@RequestBody AddTeamVO vo){ + return teamBiz.addTeam(vo); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java index 36277dd..b368919 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/biz/PCCompetitionBiz.java @@ -36,6 +36,9 @@ public class PCCompetitionBiz { BeanUtils.copyProperties(vo,competition); competition.setStartTime(new Date()); competition.setStatus(-1); + if(competition.getId() == null){ + competition.setCreateTime(new Date()); + } competition =competitionDao.save(competition); return Result.success(competition.getId()); } 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 183bf9c..5b4eea7 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 @@ -1,11 +1,9 @@ package com.tz.platform.competitiion.pc.biz; import com.tz.platform.common.core.base.Result; +import com.tz.platform.common.core.bo.MemberInfo; import com.tz.platform.competitiion.pc.dto.PageTeamDTO; -import com.tz.platform.competitiion.pc.vo.AddTeamMemberVO; -import com.tz.platform.competitiion.pc.vo.PageTeamVO; -import com.tz.platform.competitiion.pc.vo.TeamInfoVO; -import com.tz.platform.competitiion.pc.vo.TeamMemberVO; +import com.tz.platform.competitiion.pc.vo.*; import com.tz.platform.entity.CompetitionMember; import com.tz.platform.entity.CompetitionTeam; import com.tz.platform.feign.user.IFeignUser; @@ -14,8 +12,10 @@ import com.tz.platform.repository.CompetitionTeamDao; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.*; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -49,6 +49,9 @@ public class TeamBiz { CompetitionTeam team = new CompetitionTeam(); team.setStageId(vo.getStageId()); team.setCompetitionId(vo.getCompetitionId()); + if(StringUtils.hasText(vo.getTeamName())){ + team.setTeamName(vo.getTeamName()); + } Example example = Example.of(team,matcher); Pageable pageable = PageRequest.of(vo.getPageNo(),vo.getPageSize()); Page onePage = teamDao.findAll(example,pageable); @@ -65,6 +68,7 @@ public class TeamBiz { return Result.success("success"); } + @Transactional public Result addTeamMember(AddTeamMemberVO vo){ CompetitionTeam team = teamDao.getById(vo.getTeamId()); if(team == null){ @@ -74,8 +78,31 @@ public class TeamBiz { return Result.error("阶段信息不能为空"); } + List existMemberList = memberDao.findAllByCompetitionIdAndStageIdAndUserIdIn(vo.getCompetitionId(),vo.getStageId(),vo.getIds()); + if(existMemberList.size()>0){ + vo.getIds().removeAll(existMemberList.stream().mapToLong(CompetitionMember::getUserId).boxed().collect(Collectors.toList())); + } + + + List memberInfoList = feignUser.listByIds(vo.getIds()); + + List memberList = new ArrayList<>(); - return Result.success(""); + memberInfoList.forEach(m->{ + CompetitionMember member = new CompetitionMember(); + member.setCompetitionId(team.getCompetitionId()); + member.setName(m.getName()); + member.setSchool(m.getSchool()); + member.setStudentNo(m.getStudentNo()); + member.setUserId(m.getId()); + member.setStageId(team.getStageId()); + member.setTeamId(team.getId()); + memberList.add(member); + }); + + memberDao.saveAll(memberList); + + return Result.success("success"); } public Result updateTeamInfo(TeamInfoVO vo){ @@ -97,4 +124,40 @@ public class TeamBiz { teamDao.save(team); return Result.success("success"); } + + @Transactional + public Result addTeam(AddTeamVO vo){ + CompetitionTeam team = teamDao.getByTeamName(vo.getTeamName()); + if(team !=null){ + return Result.error("团队名称已存在"); + } + if(vo.getIds() == null||vo.getIds().size() == 0){ + return Result.error("请选择团队成员"); + } + + team.setTeamName(vo.getTeamName()); + team.setTeacherName(vo.getTeacher()); + team.setCompetitionId(vo.getCompetitionId()); + team.setStageId(vo.getStageId()); + + CompetitionTeam teamInfo = teamDao.save(team); + List memberInfoList = feignUser.listByIds(vo.getIds()); + + List memberList = new ArrayList<>(); + + memberInfoList.forEach(m->{ + CompetitionMember member = new CompetitionMember(); + member.setCompetitionId(teamInfo.getCompetitionId()); + member.setName(m.getName()); + member.setSchool(m.getSchool()); + member.setStudentNo(m.getStudentNo()); + member.setUserId(m.getId()); + member.setStageId(teamInfo.getStageId()); + member.setTeamId(teamInfo.getId()); + memberList.add(member); + }); + + memberDao.saveAll(memberList); + return Result.success("success"); + } } diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddTeamVO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddTeamVO.java new file mode 100644 index 0000000..f850fb6 --- /dev/null +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/AddTeamVO.java @@ -0,0 +1,14 @@ +package com.tz.platform.competitiion.pc.vo; + +import lombok.Data; + +import java.util.List; + +@Data +public class AddTeamVO { + private Long competitionId; + private Integer stageId; + private String teamName; + private String teacher; + private List ids; +} diff --git a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamVO.java b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamVO.java index 78d6fc8..f20655c 100644 --- a/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamVO.java +++ b/tz/competition/competition-service/src/main/java/com/tz/platform/competitiion/pc/vo/PageTeamVO.java @@ -8,4 +8,5 @@ public class PageTeamVO { private Integer stageId; private Integer pageNo; private Integer pageSize; + private String teamName; } 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 550402d..4ac8086 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 @@ -10,4 +10,6 @@ import java.util.List; public interface CompetitionMemberDao extends JpaRepository { List findAllByCompetitionIdAndStageIdAndTeamIdIn(Long cmpId,Integer stageId,List teamIds); + + List findAllByCompetitionIdAndStageIdAndUserIdIn(Long cmpId,Integer stageId,List ids); } 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 b864a70..d0015b8 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 @@ -7,4 +7,5 @@ import org.springframework.stereotype.Repository; @Repository public interface CompetitionTeamDao extends JpaRepository { CompetitionTeam getById(Integer id); + CompetitionTeam getByTeamName(String teamName); } diff --git a/tz/gateway/src/main/java/com/tz/platform/gateway/filter/TzGlobalFilter.java b/tz/gateway/src/main/java/com/tz/platform/gateway/filter/TzGlobalFilter.java index 5626274..679305b 100644 --- a/tz/gateway/src/main/java/com/tz/platform/gateway/filter/TzGlobalFilter.java +++ b/tz/gateway/src/main/java/com/tz/platform/gateway/filter/TzGlobalFilter.java @@ -7,6 +7,7 @@ import com.auth0.jwt.interfaces.DecodedJWT; import com.tz.platform.common.core.base.BaseException; import com.tz.platform.common.core.enmus.RedisPreEnum; import com.tz.platform.common.core.enmus.ResultEnum; +import com.tz.platform.common.core.enmus.UserTypeEnum; import com.tz.platform.common.core.tools.JSUtil; import com.tz.platform.common.core.tools.JWTUtil; import org.slf4j.Logger; @@ -76,6 +77,10 @@ public class TzGlobalFilter implements GlobalFilter , Ordered { if (uri.contains("/pc") && !uri.contains("/system/pc/menu/user/list") && !uri.contains("/system/pc/menu/user/button/list")) { + Integer userType =getUserTypeByToken(request); + if(userType < UserTypeEnum.ADMIN.getCode()){ + throw new BaseException(ResultEnum.MENU_NO); + } // 管理后台鉴权 // if (!stringRedisTemplate.hasKey(RedisPreEnum.ADMINI_MENU.getCode().concat(userNo.toString()))) { // throw new BaseException(ResultEnum.MENU_PAST); @@ -226,6 +231,31 @@ public class TzGlobalFilter implements GlobalFilter , Ordered { })); } + private Integer getUserTypeByToken(ServerHttpRequest request){ + // 头部 + String token = request.getHeaders().getFirst(TOKEN); + if (StringUtils.isEmpty(token)) { // token不存在,则从报文里面获取 + throw new BaseException("token不存在,请重新登录"); + } + // 解析 token + DecodedJWT jwt = null; + try { + jwt = JWTUtil.verify(token); + } catch (Exception e) { + logger.error("token异常,token={}", token.toString()); + throw new BaseException(ResultEnum.TOKEN_ERROR); + } + + // 校验token + if (null == jwt) { + throw new BaseException(ResultEnum.TOKEN_ERROR); + } + Integer userType = JWTUtil.getUserType(jwt); + if (userType <= 0) { + throw new BaseException(ResultEnum.TOKEN_ERROR); + } + return userType; + } private Long getUserNoByToken(ServerHttpRequest request) { // 头部 String token = request.getHeaders().getFirst(TOKEN); diff --git a/tz/system/system-service/src/main/java/com/tz/platform/system/pc/dto/RegionDTO.java b/tz/system/system-service/src/main/java/com/tz/platform/system/pc/dto/RegionDTO.java new file mode 100644 index 0000000..fc57dab --- /dev/null +++ b/tz/system/system-service/src/main/java/com/tz/platform/system/pc/dto/RegionDTO.java @@ -0,0 +1,12 @@ +package com.tz.platform.system.pc.dto; + +import com.tz.platform.entity.Region; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +@Data +public class RegionDTO implements Serializable { + private List list; +} 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 c29df6d..a6b4cab 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 @@ -25,6 +25,7 @@ public interface IFeignUser { @PostMapping(value = "feign/user/batchSave") List batchInsert(@RequestBody List list); + @PostMapping(value = "feign/user/listByIds") List listByIds(@RequestBody List ids); } diff --git a/tz/user/user-service/src/main/java/com/tz/platform/UserServiceApplication.java b/tz/user/user-service/src/main/java/com/tz/platform/UserServiceApplication.java index 2d1d4b3..01910d6 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/UserServiceApplication.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/UserServiceApplication.java @@ -13,4 +13,4 @@ public class UserServiceApplication { public static void main(String[] args) { SpringApplication.run(UserServiceApplication.class,args); } -} +} \ No newline at end of file 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 0a2f920..9a08644 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 @@ -62,7 +62,7 @@ public class ApiUserLoginBiz { UserLoginDTO dto = new UserLoginDTO(); dto.setUserNo(user.getId()); dto.setUsername(user.getUsername()); - dto.setToken(JWTUtil.create(user.getId(), JWTUtil.DATE)); + dto.setToken(JWTUtil.create(user.getId(),user.getUserType(), JWTUtil.DATE)); // 登录成功,存入缓存,单点登录使用 diff --git a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java index 5766f60..d37d33f 100644 --- a/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java +++ b/tz/user/user-service/src/main/java/com/tz/platform/user/pc/bo/UserPageBO.java @@ -7,4 +7,7 @@ import java.io.Serializable; @Data public class UserPageBO implements Serializable { private int pageNo; + private int pageSize; + private int userType; + private String name; }