参赛用户个人赛功能实现

sale
tianea 3 years ago
parent db523319d4
commit 1a63ec533d

@ -1,6 +1,7 @@
package com.tz.platform.common.core.base;
import com.auth0.jwt.interfaces.DecodedJWT;
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.springframework.beans.factory.annotation.Autowired;
@ -62,6 +63,28 @@ public class BaseController extends Base {
}
}
public UserTypeEnum getUserType(){
String token = request.getHeader("Tz-Token");
if(StringUtils.isEmpty(token)){
throw new BaseException("没有权限");
}
try {
DecodedJWT d = JWTUtil.verify(token);
int userType = JWTUtil.getUserType(d);
if(userType == UserTypeEnum.TEACHER.getCode()){
return UserTypeEnum.TEACHER;
}else if(userType == UserTypeEnum.ADMIN.getCode()){
return UserTypeEnum.ADMIN;
}else{
return UserTypeEnum.USER;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new BaseException("权限认证失败");
}
}
public static String getString(HttpServletRequest request) {
DataInputStream in = null;
try {

@ -24,4 +24,6 @@ public class SystemUtil {
public static final String PIC_PATH = getProperty("pic_path");
public static final String PIC_RESOURCE_URL= getProperty("pic_recourse_url");
public static final String INIT_PASSWORD= getProperty("initPwd");
}

@ -1,2 +1,3 @@
pic_path=/Volumes/Lexar/www/pic/
pic_recourse_url=http://localhost:8899/pic/
pic_recourse_url=http://localhost:8899/pic/
initPwd=tz2022

@ -4,6 +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.dto.PageTeamMemberDTO;
import com.tz.platform.competitiion.pc.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -42,4 +43,9 @@ public class CompetitionTeamController extends BaseController {
public Result<String> addTeam(@RequestBody AddTeamVO vo){
return teamBiz.addTeam(vo);
}
@PostMapping(value = "listTeamMember")
public Result<PageTeamMemberDTO> listTeamMember(@RequestBody PageTeamMemberVO vo){
return teamBiz.listTeamMember(vo);
}
}

@ -0,0 +1,12 @@
package com.tz.platform.competitiion.pc.dto;
import com.tz.platform.entity.CompetitionMember;
import lombok.Data;
import org.springframework.data.domain.Page;
import java.io.Serializable;
@Data
public class PageTeamMemberDTO implements Serializable {
private Page<CompetitionMember> page;
}

@ -0,0 +1,12 @@
package com.tz.platform.competitiion.pc.vo;
import lombok.Data;
@Data
public class PageTeamMemberVO {
private Integer pageSize;
private Integer pageNo;
private Long competitionId;
private Integer stageId;
}

@ -1,6 +1,8 @@
package com.tz.platform.repository;
import com.tz.platform.entity.CompetitionMember;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@ -12,4 +14,6 @@ public interface CompetitionMemberDao extends JpaRepository<CompetitionMember,In
List<CompetitionMember> findAllByCompetitionIdAndStageIdAndTeamIdIn(Long cmpId,Integer stageId,List<Integer> teamIds);
List<CompetitionMember> findAllByCompetitionIdAndStageIdAndUserIdIn(Long cmpId,Integer stageId,List<Long> ids);
Page<CompetitionMember> findAllByCompetitionIdAndStageId(Long cmpid, Integer stageId , Pageable pageable);
}

@ -0,0 +1,12 @@
package com.tz.platform.exam.pc.dto;
import lombok.Data;
import java.io.Serializable;
@Data
public class QuestionContDTO implements Serializable {
private Integer singleCount;
private Integer multiCount;
private Integer judgeCount;
}

@ -1,16 +1,14 @@
package com.tz.platform.pc;
import com.tz.platform.common.core.base.Result;
import com.tz.platform.exam.pc.dto.QuestionContDTO;
import com.tz.platform.pc.biz.PCQuestionBiz;
import com.tz.platform.pc.dto.ListQuestionDTO;
import com.tz.platform.pc.dto.PageQuestionDTO;
import com.tz.platform.pc.dto.QuestionDTO;
import com.tz.platform.pc.vo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping(value = "/pc/question")
@ -53,4 +51,9 @@ public class PCQuestionController {
public Result<ListQuestionDTO> listByIds(@RequestBody ListQuestionVO vo){
return questionBiz.listByIds(vo);
}
@GetMapping(value = "getCount")
public Result<QuestionContDTO> getCount(){
return questionBiz.getCount();
}
}

@ -9,12 +9,13 @@ import com.tz.platform.pc.vo.*;
import com.tz.platform.repository.QuestionDao;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.*;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
@Component
public class PCMuiltQuestionBiz {
@ -23,17 +24,45 @@ public class PCMuiltQuestionBiz {
public Result<PageMuiltQuestionDTO> list(PageQuestionVO questionVO){
PageMuiltQuestionDTO questionDTO = new PageMuiltQuestionDTO();
Pageable pageable = PageRequest.of(questionVO.getPageNo(),20);
// Pageable pageable = PageRequest.of(questionVO.getPageNo(),20);
// Page<Question> questions =null;
// if((questionVO.getCourseId() == null|| questionVO.getCourseId() == 0) && StringUtils.isEmpty(questionVO.getStem())){
// questions = questionDao.findAllByType(1,pageable);
// }else if(questionVO.getCourseId()>0&&StringUtils.hasText(questionVO.getStem())){
// questions = questionDao.findAllByCourseIdAndStemAndType(questionVO.getCourseId(),questionVO.getStem(),1,pageable);
// }else if(questionVO.getCourseId()>0){
// questions = questionDao.findAllByCourseIdAndType(questionVO.getCourseId(),1,pageable);
// }else {
// questions = questionDao.findAllByStemAndType(questionVO.getStem(), 1,pageable);
// }
Integer pageNo = questionVO.getPageNo()-1;
if(pageNo< 0){
pageNo = 0;
}
if(questionVO.getPageSize()==null){
questionVO.setPageSize(20);
}
Pageable pageable = PageRequest.of(pageNo,questionVO.getPageSize());
Page<Question> questions =null;
if((questionVO.getCourseId() == null|| questionVO.getCourseId() == 0) && StringUtils.isEmpty(questionVO.getStem())){
questions = questionDao.findAllByType(1,pageable);
}else if(questionVO.getCourseId()>0&&StringUtils.hasText(questionVO.getStem())){
questions = questionDao.findAllByCourseIdAndStemAndType(questionVO.getCourseId(),questionVO.getStem(),1,pageable);
}else if(questionVO.getCourseId()>0){
questions = questionDao.findAllByCourseIdAndType(questionVO.getCourseId(),1,pageable);
}else {
questions = questionDao.findAllByStemAndType(questionVO.getStem(), 1,pageable);
Long questionId = 0L;
if(StringUtils.hasText(questionVO.getStem())){
String regex = "\\d+";
if(questionVO.getStem().matches(regex)){
questionId = Long.parseLong(questionVO.getStem());
List<Long> ids = new ArrayList<>();
ids.add(questionId);
questions = questionDao.findAllByIdIn(ids,pageable);
return Result.success(questionDTO.setPage(questions));
}
}
Question question = new Question();
BeanUtils.copyProperties(questionVO,question);
ExampleMatcher exampleMatcher = ExampleMatcher.matching().withIgnoreNullValues();
if(StringUtils.isEmpty(questionVO.getStem())){
exampleMatcher = exampleMatcher.withIgnorePaths("stem");
}
Example example = Example.of(question,exampleMatcher);
questions = questionDao.findAll( example ,pageable);
return Result.success(questionDTO.setPage(questions));
}

@ -1,7 +1,9 @@
package com.tz.platform.pc.biz;
import com.tz.platform.common.core.base.Result;
import com.tz.platform.common.core.enmus.QuestionTypeEnum;
import com.tz.platform.entity.Question;
import com.tz.platform.exam.pc.dto.QuestionContDTO;
import com.tz.platform.feign.user.IFeignUser;
import com.tz.platform.feign.user.vo.UserVo;
import com.tz.platform.pc.dto.ListQuestionDTO;
@ -157,4 +159,15 @@ public class PCQuestionBiz {
dto.setList(list);
return Result.success(dto);
}
public Result<QuestionContDTO> getCount(){
int singleCount = questionDao.countByQuestionTypeAndType(QuestionTypeEnum.SINGLE.getCode(),0);
int multiCount = questionDao.countByQuestionTypeAndType(QuestionTypeEnum.MULTY.getCode(),0);
int judgeCount = questionDao.countByQuestionTypeAndType(QuestionTypeEnum.JUDGE.getCode(),0);
QuestionContDTO dto = new QuestionContDTO();
dto.setJudgeCount(judgeCount);
dto.setMultiCount(multiCount);
dto.setSingleCount(singleCount);
return Result.success(dto);
}
}

@ -33,6 +33,7 @@ public interface QuestionDao extends JpaRepository<Question,Long> {
List<Question> findAllByIdIn(List<Long> ids);
int countByQuestionTypeAndType(Integer qtype,Integer type);
@Transactional
@Modifying

@ -0,0 +1,13 @@
package com.tz.platform.feign;
import com.tz.platform.feign.vo.RegionVO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.List;
@FeignClient(value = "tz-system-service")
public interface IFeignRegion {
@RequestMapping(value = "/feign/system/region/list")
List<RegionVO> list();
}

@ -0,0 +1,9 @@
package com.tz.platform.feign.vo;
import lombok.Data;
@Data
public class RegionVO {
private Integer id;
private String name;
}

@ -0,0 +1,22 @@
package com.tz.platform.system.pc;
import com.tz.platform.common.core.base.BaseController;
import com.tz.platform.common.core.base.Result;
import com.tz.platform.system.pc.biz.PCRegionBiz;
import com.tz.platform.system.pc.dto.RegionDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(value = "/pc/system/region")
public class RegionController extends BaseController {
@Autowired
private PCRegionBiz biz;
@GetMapping( value = "list")
public Result<RegionDTO> list(){
return biz.list();
}
}

@ -0,0 +1,24 @@
package com.tz.platform.system.pc.biz;
import com.tz.platform.common.core.base.Result;
import com.tz.platform.entity.Region;
import com.tz.platform.repository.RegionDao;
import com.tz.platform.system.pc.dto.RegionDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Component
public class PCRegionBiz {
@Autowired
private RegionDao regionDao;
public Result<RegionDTO> list(){
List<Region> regionList = regionDao.findAll();
RegionDTO dto = new RegionDTO();
dto.setList(regionList);
return Result.success(dto);
}
}

@ -4,12 +4,13 @@ import com.tz.platform.entity.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public interface UserDao extends JpaRepository<User,Long> {
public interface UserDao extends JpaRepository<User,Long> , JpaSpecificationExecutor<User> {
/**
*
* @param mobile
@ -43,4 +44,6 @@ public interface UserDao extends JpaRepository<User,Long> {
List<User> findAllByStudentNoIn(List<String> studentNoList);
List<User> findAllByIdIn(List<Long> ids);
Page<User> findAllByUsernameOrName(String username,String name,Pageable pageable);
}

@ -17,6 +17,7 @@ import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import java.util.Date;
import java.util.concurrent.TimeUnit;
@Component
public class ApiUserLoginBiz {
@ -55,7 +56,6 @@ public class ApiUserLoginBiz {
// 放入缓存,错误次数+1
return Result.error("账号或者密码不正确");
}
// 登录日志
loginLog(LoginStatusEnum.SUCCESS, userLoginPasswordBO.getIp(),user.getUsername(), userLoginPasswordBO.getClient());
@ -63,8 +63,6 @@ public class ApiUserLoginBiz {
dto.setUserNo(user.getId());
dto.setUsername(user.getUsername());
dto.setToken(JWTUtil.create(user.getId(),user.getUserType(), JWTUtil.DATE));
// 登录成功,存入缓存,单点登录使用
// redisTemplate.opsForValue().set(dto.getUserNo().toString(), dto.getToken(), 1, TimeUnit.DAYS);

@ -7,6 +7,7 @@ import com.tz.platform.user.pc.bo.UserPageBO;
import com.tz.platform.user.pc.dto.UserDTO;
import com.tz.platform.user.pc.dto.UserPageDTO;
import com.tz.platform.user.pc.vo.GetUserVO;
import com.tz.platform.user.pc.vo.UserVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
@ -20,7 +21,7 @@ public class PcUserInfoController extends BaseController {
@PostMapping(path = "list")
public Result<UserPageDTO> listUser(@RequestBody UserPageBO bo){
return pcUserInfoBiz.listPage(bo.getPageNo());
return pcUserInfoBiz.listPage(bo);
}
public Result<String> importUser(MultipartFile file){
@ -32,4 +33,17 @@ public class PcUserInfoController extends BaseController {
return pcUserInfoBiz.getUser(vo);
}
public Result<UserPageDTO> listUserByStudentNoOrSchool(@RequestBody UserPageBO bo){
return pcUserInfoBiz.listByStudentNoOrSchool(bo);
}
@PostMapping(value = "deleteUser")
public Result<String> deletUser(@RequestBody UserVO vo){
return pcUserInfoBiz.deleteUser(vo);
}
@PostMapping(value = "addUser")
public Result<Long> addUser(@RequestBody UserVO vo){
return pcUserInfoBiz.saveUser(vo);
}
}

@ -1,19 +1,29 @@
package com.tz.platform.user.pc.biz;
import cn.hutool.crypto.digest.DigestUtil;
import com.tz.platform.common.core.base.Result;
import com.tz.platform.common.core.config.SystemUtil;
import com.tz.platform.common.core.enmus.UserTypeEnum;
import com.tz.platform.common.core.tools.StrUtil;
import com.tz.platform.entity.User;
import com.tz.platform.repository.UserDao;
import com.tz.platform.user.pc.bo.UserPageBO;
import com.tz.platform.user.pc.dto.UserDTO;
import com.tz.platform.user.pc.dto.UserPageDTO;
import com.tz.platform.user.pc.vo.GetUserVO;
import com.tz.platform.user.pc.vo.UserVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.*;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import java.util.Date;
import java.util.regex.Pattern;
@Component
@ -22,12 +32,59 @@ public class PcUserInfoBiz {
private UserDao userDao;
public Result<UserPageDTO> listPage(Integer pageNo){
if(pageNo<0){
pageNo = 0;
public Result<UserPageDTO> listPage(UserPageBO bo){
if(bo.getPageNo()<=0){
bo.setPageNo(0);
}else{
bo.setPageNo(bo.getPageNo()-1);
}
if(bo.getPageSize() <=0){
bo.setPageSize(20);
}
if(bo.getUserType()<=0){
bo.setUserType(UserTypeEnum.USER.getCode());
}
Pageable pageable = PageRequest.of(bo.getPageNo(),bo.getPageSize());
User user = new User();
user.setUserType(bo.getUserType());
if(StringUtils.hasText(bo.getName())){
if(bo.getName().matches("\\d+")){
user.setStudentNo(bo.getName());
}else{
user.setSchool(bo.getName());
}
}
Pageable pageable = PageRequest.of(pageNo,20);
Page<User> page = userDao.findAllByUserType(UserTypeEnum.USER.getCode(), pageable);
ExampleMatcher matcher = ExampleMatcher.matching().withIgnoreNullValues();
Example<User> example = Example.of(user,matcher);
Page<User> page = userDao.findAll(example,pageable); // userDao.findAllByUserType(bo.getUserType(), pageable);
UserPageDTO userPageDTO = new UserPageDTO();
userPageDTO.setUserPage(page);
return Result.success(userPageDTO);
}
public Result<UserPageDTO> listByStudentNoOrSchool(UserPageBO bo){
if(bo.getPageNo()<=0){
bo.setPageNo(0);
}else{
bo.setPageNo(bo.getPageNo()-1);
}
if(bo.getPageSize() <=0){
bo.setPageSize(20);
}
if(bo.getUserType()<=0){
bo.setUserType(UserTypeEnum.USER.getCode());
}
Pageable pageable = PageRequest.of(bo.getPageNo(),bo.getPageSize());
Specification<User> specification = new Specification<User>() {
@Override
public Predicate toPredicate(Root<User> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
return null;
}
};
Page<User> page = userDao.findAll(specification,pageable);
UserPageDTO userPageDTO = new UserPageDTO();
userPageDTO.setUserPage(page);
return Result.success(userPageDTO);
@ -48,4 +105,77 @@ public class PcUserInfoBiz {
}
return Result.success(dto);
}
public Result<Long> saveUser(UserVO vo){
if(vo.getLevelId() == null||vo.getLevelId()<=0){
return Result.error("层次不能为空");
}
if(vo.getProvinceId() == null||vo.getProvinceId()<=0){
return Result.error("省份不能为空");
}
if(StringUtils.isEmpty(vo.getStudentNo())){
return Result.error("学号不能为空");
}
if(StringUtils.isEmpty(vo.getName())){
return Result.error("姓名不能为空");
}
if(StringUtils.isEmpty(vo.getSchool())){
return Result.error("学校不能为空");
}
User creator = userDao.getById(vo.getUserNo());
User user = new User();
BeanUtils.copyProperties(vo,user);
user.setGmtCreate(new Date());
user.setUsername(user.getStudentNo());
user.setGmtModified(new Date());
if(user.getId()== null){
user.setMobileSalt(StrUtil.get32UUID());
user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() + SystemUtil.INIT_PASSWORD));
}
if(user.getUserType().equals(UserTypeEnum.ADMIN.getCode())&&creator.getUserType()!=3){
return Result.error("无权添加该用户");
}
user = userDao.save(user);
return Result.success(user.getId());
}
public Result<String> deleteUser(UserVO vo){
if(vo.getId()==null){
return Result.error("无该用户信息");
}
userDao.deleteById(vo.getId());
return Result.success("成功");
}
public Result<Long> saveAdmin(UserVO vo){
if(StringUtils.isEmpty(vo.getName())){
return Result.error("姓名不能为空");
}
if(StringUtils.isEmpty(vo.getUserNo())){
return Result.error("用户名不能为空");
}
if(StringUtils.isEmpty(vo.getPassword())){
return Result.error("密码不能为空");
}
User creator = userDao.getById(vo.getUserNo());
User user = new User();
BeanUtils.copyProperties(vo,user);
user.setGmtCreate(new Date());
user.setUsername(user.getStudentNo());
user.setGmtModified(new Date());
user.setMobileSalt(StrUtil.get32UUID());
user.setMobilePsw(DigestUtil.sha1Hex(user.getMobileSalt() + vo.getPassword()));
if(!user.getUserType().equals(UserTypeEnum.USER.getCode())&&creator.getUserType()!=3){
return Result.error("无权添加该用户");
}
user = userDao.save(user);
return Result.success(user.getId());
}
}

@ -0,0 +1,11 @@
package com.tz.platform.user.pc.dto;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class ListUploadUserDTO implements Serializable {
List<UploadUserDTO> list;
}

@ -0,0 +1,15 @@
package com.tz.platform.user.pc.dto;
import lombok.Data;
@Data
public class UploadUserDTO {
private String studentNo;
private String name;
private String school;
private String mobile;
private String province;
private String region;
private String level;
private String status;
}

@ -0,0 +1,21 @@
package com.tz.platform.user.pc.vo;
import lombok.Data;
@Data
public class UserVO {
private Long userNo;
private Long id;
private String studentNo;
private String password;
private String name;
private String school;
private String mobile;
private Integer provinceId;
private Integer regionId;
private Integer levelId;
private String province;
private String region;
private String level;
private Integer userType;
}
Loading…
Cancel
Save