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