This commit is contained in:
ahao 2025-04-11 13:29:50 +08:00
parent 3f1f0bd284
commit 57cfcb5174
39 changed files with 1220 additions and 0 deletions

View File

@ -0,0 +1,45 @@
package org.sqa.simply_rugby.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.sqa.simply_rugby.common.Result;
import org.sqa.simply_rugby.domain.entity.Announcement;
import org.sqa.simply_rugby.service.AnnouncementService;
/**
* 公告管理控制器
*/
@RestController
@RequestMapping("/api/announcements")
@RequiredArgsConstructor
public class AnnouncementController {
private final AnnouncementService announcementService;
@PostMapping
public Result<Void> create(@RequestBody Announcement announcement) {
announcementService.save(announcement);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable String id) {
announcementService.removeById(id);
return Result.success();
}
@PutMapping
public Result<Void> update(@RequestBody Announcement announcement) {
announcementService.updateById(announcement);
return Result.success();
}
@GetMapping("/{id}")
public Result<Announcement> get(@PathVariable String id) {
return Result.success(announcementService.getById(id));
}
@GetMapping("/latest")
public Result<Announcement> getLatest() {
return Result.success(announcementService.getLatest());
}
}

View File

@ -0,0 +1,68 @@
package org.sqa.simply_rugby.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.sqa.simply_rugby.common.Result;
import org.sqa.simply_rugby.domain.dto.MemberDetailDTO;
import org.sqa.simply_rugby.domain.entity.Member;
import org.sqa.simply_rugby.service.MemberService;
import java.util.List;
/**
* 成员管理控制器
*/
@RestController
@RequestMapping("/api/members")
@RequiredArgsConstructor
public class MemberController {
private final MemberService memberService;
@PostMapping
public Result<Void> create(@RequestBody Member member) {
memberService.save(member);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable String id) {
memberService.removeById(id);
return Result.success();
}
@PutMapping
public Result<Void> update(@RequestBody Member member) {
memberService.updateById(member);
return Result.success();
}
@GetMapping("/{id}")
public Result<Member> get(@PathVariable String id) {
return Result.success(memberService.getById(id));
}
/**
* 分页查询成员
*
* @param pageNum 页码
* @param pageSize 每页大小
* @return 成员列表
*/
@GetMapping("/page")
public Result<List<Member>> page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize
) {
return Result.success(memberService.page(pageNum, pageSize).getRecords());
}
/**
* 获取随机成员
*
* @return 随机成员列表
*/
@GetMapping("/random")
public Result<List<MemberDetailDTO>> getRandomMembers() {
return Result.success(memberService.getRandomMembers(4));
}
}

View File

@ -0,0 +1,68 @@
package org.sqa.simply_rugby.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.sqa.simply_rugby.common.Result;
import org.sqa.simply_rugby.domain.dto.PlayerDetailDTO;
import org.sqa.simply_rugby.domain.dto.PlayerDTO;
import org.sqa.simply_rugby.domain.dto.PlayerPageDTO;
import org.sqa.simply_rugby.domain.entity.Player;
import org.sqa.simply_rugby.service.PlayerService;
import java.util.List;
/**
* 球员管理控制器
*/
@RestController
@RequestMapping("/api/players")
@RequiredArgsConstructor
public class PlayerController {
private final PlayerService playerService;
@PostMapping
public Result<Void> create(@RequestBody Player player) {
playerService.save(player);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable String id) {
playerService.removeById(id);
return Result.success();
}
@PutMapping
public Result<Void> update(@RequestBody Player player) {
playerService.updateById(player);
return Result.success();
}
@GetMapping("/{id}")
public Result<PlayerDTO> get(@PathVariable String id) {
return Result.success(playerService.getPlayerWithInfo(id));
}
@GetMapping("/page")
public Result<Page<PlayerPageDTO>> page(
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize
) {
return Result.success(playerService.pageWithInfo(pageNum, pageSize));
}
@GetMapping("/page/team/{teamId}")
public Result<Page<Player>> pageByTeam(
@PathVariable String teamId,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize
) {
return Result.success(playerService.pageByTeam(teamId, pageNum, pageSize));
}
@GetMapping("/random")
public Result<List<PlayerDetailDTO>> getRandomPlayers() {
return Result.success(playerService.getRandomPlayers(3));
}
}

View File

@ -0,0 +1,52 @@
package org.sqa.simply_rugby.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.sqa.simply_rugby.common.Result;
import org.sqa.simply_rugby.domain.dto.PageRequest;
import org.sqa.simply_rugby.domain.entity.PlayerSkillProfile;
import org.sqa.simply_rugby.service.PlayerSkillProfileService;
/**
* 球员技能配置控制器
*/
@RestController
@RequestMapping("/api/player-skills")
@RequiredArgsConstructor
public class PlayerSkillProfileController {
private final PlayerSkillProfileService playerSkillProfileService;
@PostMapping
public Result<Void> create(@RequestBody PlayerSkillProfile profile) {
playerSkillProfileService.save(profile);
return Result.success();
}
@DeleteMapping("/{id}")
public Result<Void> delete(@PathVariable String id) {
playerSkillProfileService.removeById(id);
return Result.success();
}
@PutMapping
public Result<Void> update(@RequestBody PlayerSkillProfile profile) {
playerSkillProfileService.updateById(profile);
return Result.success();
}
@GetMapping("/{id}")
public Result<PlayerSkillProfile> get(@PathVariable String id) {
return Result.success(playerSkillProfileService.getById(id));
}
@GetMapping("/player/{playerId}")
public Result<PlayerSkillProfile> getByPlayerId(@PathVariable String playerId) {
return Result.success(playerSkillProfileService.getByPlayerId(playerId));
}
@GetMapping("/page")
public Result<Page<PlayerSkillProfile>> page(PageRequest request) {
return Result.success(playerSkillProfileService.page(request.getPageNum(), request.getPageSize()));
}
}

View File

@ -0,0 +1,14 @@
package org.sqa.simply_rugby.domain.dto;
import lombok.Data;
import java.time.LocalDate;
@Data
public class MemberDetailDTO {
private String avatar;
private String name;
private LocalDate dateOfBirth;
private String role;
private String sruNumber;
private String email;
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.domain.dto;
import lombok.Data;
@Data
public class PageRequest {
private Integer pageNum = 1;
private Integer pageSize = 10;
}

View File

@ -0,0 +1,50 @@
package org.sqa.simply_rugby.domain.dto;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 球员详情DTO
*/
@Data
public class PlayerDTO {
// 球员基本信息
private String id;
private String memberId;
private String teamId;
private String position;
private String teamNumber; // 队内编号
private Integer height; // 身高(cm)
private Integer weight; // 体重(kg)
private LocalDateTime createTime; // 创建时间
// 监护人信息
private String guardian1Name;
private String guardian1Relationship;
private String guardian1Address;
private String guardian1Tel;
private String guardian2Name;
private String guardian2Relationship;
private String guardian2Address;
private String guardian2Tel;
// 医生信息
private String doctorName;
private String doctorTel;
private String doctorAddress;
private String knownHealthIssues;
// 成员信息
private String name;
private String avatar;
private String sruNumber;
private LocalDate dateOfBirth;
private String email;
private String telNumber;
private String mobileNumber;
// 队伍信息
private String teamName;
}

View File

@ -0,0 +1,27 @@
package org.sqa.simply_rugby.domain.dto;
import lombok.Data;
@Data
public class PlayerDetailDTO {
// 基本信息
private String name;
private String avatar;
private String teamName;
private String position;
// 技能评分
private Integer passingStandard;
private Integer passingSpin;
private Integer passingPop;
private Integer tacklingFront;
private Integer tacklingRear;
private Integer tacklingSide;
private Integer tacklingScrabble;
private Integer kickingDrop;
private Integer kickingPunt;
private Integer kickingGrubber;
private Integer kickingGoal;
}

View File

@ -0,0 +1,45 @@
package org.sqa.simply_rugby.domain.dto;
import lombok.Data;
import java.time.LocalDate;
import java.time.LocalDateTime;
/**
* 球员分页数据DTO
*/
@Data
public class PlayerPageDTO {
// 球员基本信息
private String id;
private String position;
private String teamNumber; // 队内编号
private Integer height; // 身高(cm)
private Integer weight; // 体重(kg)
private LocalDateTime createTime; // 创建时间
// 成员信息
private String name;
private String avatar;
private String sruNumber;
private LocalDate dateOfBirth;
private String email;
private String telNumber;
private String mobileNumber;
// 监护人信息
private String guardian1Name;
private String guardian1Tel;
private String guardian2Name;
private String guardian2Tel;
// 医生信息
private String doctorName;
private String doctorTel;
// 健康信息
private String knownHealthIssues;
// 队伍信息
private String teamName;
}

View File

@ -0,0 +1,17 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("announcement")
public class Announcement {
@TableId
private String id;
private String title;
private String content;
private LocalDateTime time;
}

View File

@ -0,0 +1,15 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("function")
public class Function {
@TableId
private String id;
private String name;
private String parentId;
private String url;
}

View File

@ -0,0 +1,26 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDate;
@Data
@TableName("member")
public class Member {
@TableId
private String id;
private String userName;
private String avatar;
private String password;
private String salt;
private String name;
private String address;
private String postcode;
private String sruNumber;
private LocalDate dateOfBirth;
private String telNumber;
private String mobileNumber;
private String email;
}

View File

@ -0,0 +1,28 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 成员角色实体类
*/
@Data
@TableName("member_Role")
public class MemberRole {
/**
* 主键ID
*/
@TableId
private String id;
/**
* 成员ID
*/
private String memberId;
/**
* 角色ID
*/
private String roleId;
}

View File

@ -0,0 +1,33 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;
@Data
@TableName("player")
public class Player {
@TableId
private String id;
private String memberId;
private String teamId;
private String position;
private String teamNumber; // 队内编号
private Integer height; // 身高(cm)
private Integer weight; // 体重(kg)
private String guardian1Name;
private String guardian1Relationship;
private String guardian1Address;
private String guardian1Tel;
private String guardian2Name;
private String guardian2Relationship;
private String guardian2Address;
private String guardian2Tel;
private String doctorName;
private String doctorTel;
private String doctorAddress;
private String knownHealthIssues;
private LocalDateTime createTime; // 创建时间
}

View File

@ -0,0 +1,38 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("player_skill_profile")
public class PlayerSkillProfile {
@TableId
private String id;
private String playerId;
private Integer passingStandard;
private String passingStandardComment;
private Integer passingSpin;
private String passingSpinComment;
private Integer passingPop;
private String passingPopComment;
private Integer tacklingFront;
private String tacklingFrontComment;
private Integer tacklingRear;
private String tacklingRearComment;
private Integer tacklingSide;
private String tacklingSideComment;
private Integer tacklingScrabble;
private String tacklingScrabbleComment;
private Integer kickingDrop;
private String kickingDropComment;
private Integer kickingPunt;
private String kickingPuntComment;
private Integer kickingGrubber;
private String kickingGrubberComment;
private Integer kickingGoal;
private String kickingGoalComment;
}

View File

@ -0,0 +1,30 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
/**
* 角色实体类
*/
@Data
@TableName("role")
public class Role {
/**
* 主键ID
*/
@TableId
private String id;
/**
* 角色名称
*/
@TableField("role_name")
private String roleName;
/**
* 角色描述
*/
private String description;
}

View File

@ -0,0 +1,14 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("role_function")
public class RoleFunction {
@TableId
private String id;
private String roleId;
private String functionId;
}

View File

@ -0,0 +1,14 @@
package org.sqa.simply_rugby.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("team_member")
public class TeamMember {
@TableId
private String id;
private String teamId;
private String memberId;
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.Announcement;
@Mapper
public interface AnnouncementMapper extends BaseMapper<Announcement> {
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.Function;
@Mapper
public interface FunctionMapper extends BaseMapper<Function> {
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.Member;
@Mapper
public interface MemberMapper extends BaseMapper<Member> {
}

View File

@ -0,0 +1,12 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.MemberRole;
/**
* 成员角色Mapper接口
*/
@Mapper
public interface MemberRoleMapper extends BaseMapper<MemberRole> {
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.Player;
@Mapper
public interface PlayerMapper extends BaseMapper<Player> {
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.PlayerSkillProfile;
@Mapper
public interface PlayerSkillProfileMapper extends BaseMapper<PlayerSkillProfile> {
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.RoleFunction;
@Mapper
public interface RoleFunctionMapper extends BaseMapper<RoleFunction> {
}

View File

@ -0,0 +1,12 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.Role;
/**
* 角色Mapper接口
*/
@Mapper
public interface RoleMapper extends BaseMapper<Role> {
}

View File

@ -0,0 +1,9 @@
package org.sqa.simply_rugby.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.sqa.simply_rugby.domain.entity.TeamMember;
@Mapper
public interface TeamMemberMapper extends BaseMapper<TeamMember> {
}

View File

@ -0,0 +1,10 @@
package org.sqa.simply_rugby.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.sqa.simply_rugby.domain.entity.Announcement;
public interface AnnouncementService extends IService<Announcement> {
Page<Announcement> page(Integer pageNum, Integer pageSize);
Announcement getLatest();
}

View File

@ -0,0 +1,28 @@
package org.sqa.simply_rugby.service;
import org.sqa.simply_rugby.domain.entity.MemberRole;
import java.util.List;
/**
* 成员角色服务接口
*/
public interface MemberRoleService {
/**
* 根据成员ID获取角色列表
*
* @param memberId 成员ID
* @return 角色列表
*/
List<MemberRole> listByMemberId(String memberId);
/**
* 根据成员ID获取角色列表别名方法
*
* @param memberId 成员ID
* @return 角色列表
*/
default List<MemberRole> getByMemberId(String memberId) {
return listByMemberId(memberId);
}
}

View File

@ -0,0 +1,13 @@
package org.sqa.simply_rugby.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.sqa.simply_rugby.domain.dto.MemberDetailDTO;
import org.sqa.simply_rugby.domain.entity.Member;
import java.util.List;
public interface MemberService extends IService<Member> {
Page<Member> page(Integer pageNum, Integer pageSize);
List<MemberDetailDTO> getRandomMembers(int count);
}

View File

@ -0,0 +1,18 @@
package org.sqa.simply_rugby.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.sqa.simply_rugby.domain.dto.PlayerDTO;
import org.sqa.simply_rugby.domain.dto.PlayerDetailDTO;
import org.sqa.simply_rugby.domain.dto.PlayerPageDTO;
import org.sqa.simply_rugby.domain.entity.Player;
import java.util.List;
public interface PlayerService extends IService<Player> {
Page<Player> page(Integer pageNum, Integer pageSize);
Page<PlayerPageDTO> pageWithInfo(Integer pageNum, Integer pageSize);
Page<Player> pageByTeam(String teamId, Integer pageNum, Integer pageSize);
List<PlayerDetailDTO> getRandomPlayers(int count);
PlayerDTO getPlayerWithInfo(String id);
}

View File

@ -0,0 +1,10 @@
package org.sqa.simply_rugby.service;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.sqa.simply_rugby.domain.entity.PlayerSkillProfile;
public interface PlayerSkillProfileService extends IService<PlayerSkillProfile> {
Page<PlayerSkillProfile> page(Integer pageNum, Integer pageSize);
PlayerSkillProfile getByPlayerId(String playerId);
}

View File

@ -0,0 +1,26 @@
package org.sqa.simply_rugby.service;
import org.sqa.simply_rugby.domain.entity.Role;
import java.util.List;
/**
* 角色服务接口
*/
public interface RoleService {
/**
* 根据ID获取角色
*
* @param id 角色ID
* @return 角色信息
*/
Role getById(String id);
/**
* 根据ID列表批量获取角色
*
* @param ids 角色ID列表
* @return 角色列表
*/
List<Role> listByIds(List<String> ids);
}

View File

@ -0,0 +1,25 @@
package org.sqa.simply_rugby.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.sqa.simply_rugby.domain.entity.Announcement;
import org.sqa.simply_rugby.mapper.AnnouncementMapper;
import org.sqa.simply_rugby.service.AnnouncementService;
@Service
public class AnnouncementServiceImpl extends ServiceImpl<AnnouncementMapper, Announcement> implements AnnouncementService {
@Override
public Page<Announcement> page(Integer pageNum, Integer pageSize) {
return page(new Page<>(pageNum, pageSize));
}
@Override
public Announcement getLatest() {
LambdaQueryWrapper<Announcement> wrapper = new LambdaQueryWrapper<>();
wrapper.orderByDesc(Announcement::getTime);
wrapper.last("LIMIT 1");
return getOne(wrapper);
}
}

View File

@ -0,0 +1,27 @@
package org.sqa.simply_rugby.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.sqa.simply_rugby.domain.entity.MemberRole;
import org.sqa.simply_rugby.mapper.MemberRoleMapper;
import org.sqa.simply_rugby.service.MemberRoleService;
import java.util.List;
/**
* 成员角色服务实现类
*/
@Service
@RequiredArgsConstructor
public class MemberRoleServiceImpl implements MemberRoleService {
private final MemberRoleMapper memberRoleMapper;
@Override
public List<MemberRole> listByMemberId(String memberId) {
return memberRoleMapper.selectList(
new LambdaQueryWrapper<MemberRole>()
.eq(MemberRole::getMemberId, memberId)
);
}
}

View File

@ -0,0 +1,101 @@
package org.sqa.simply_rugby.service.impl;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.sqa.simply_rugby.domain.dto.MemberDetailDTO;
import org.sqa.simply_rugby.domain.entity.Member;
import org.sqa.simply_rugby.domain.entity.MemberRole;
import org.sqa.simply_rugby.domain.entity.Role;
import org.sqa.simply_rugby.mapper.MemberMapper;
import org.sqa.simply_rugby.service.MemberRoleService;
import org.sqa.simply_rugby.service.MemberService;
import org.sqa.simply_rugby.service.RoleService;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@Slf4j
@Service
@RequiredArgsConstructor
public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> implements MemberService {
private final MemberRoleService memberRoleService;
private final RoleService roleService;
@Override
public Page<Member> page(Integer pageNum, Integer pageSize) {
return page(new Page<>(pageNum, pageSize));
}
@Override
public List<MemberDetailDTO> getRandomMembers(int count) {
// 获取所有成员
List<Member> allMembers = list();
if (allMembers.isEmpty()) {
return new ArrayList<>();
}
// 随机选择指定数量的成员
List<Member> selectedMembers = new ArrayList<>();
Random random = new Random();
int totalMembers = allMembers.size();
count = Math.min(count, totalMembers);
while (selectedMembers.size() < count) {
int index = random.nextInt(totalMembers);
Member member = allMembers.get(index);
if (!selectedMembers.contains(member)) {
selectedMembers.add(member);
}
}
// 转换为DTO并填充相关信息
List<MemberDetailDTO> result = new ArrayList<>();
for (Member member : selectedMembers) {
MemberDetailDTO dto = new MemberDetailDTO();
dto.setAvatar(member.getAvatar());
dto.setName(member.getName());
dto.setDateOfBirth(member.getDateOfBirth());
dto.setSruNumber(member.getSruNumber());
dto.setEmail(member.getEmail());
try {
// 获取成员角色
List<MemberRole> memberRoles = memberRoleService.getByMemberId(member.getId());
log.info("成员ID: {}, 查询到的角色数量: {}", member.getId(), memberRoles.size());
if (!memberRoles.isEmpty()) {
MemberRole memberRole = memberRoles.get(0); // 获取第一个角色
log.info("成员ID: {}, 角色ID: {}", member.getId(), memberRole.getRoleId());
if (memberRole != null && memberRole.getRoleId() != null) {
try {
Role role = roleService.getById(memberRole.getRoleId());
if (role != null) {
log.info("成员ID: {}, 角色名称: {}", member.getId(), role.getRoleName());
dto.setRole(role.getRoleName());
} else {
log.warn("未找到角色信息roleId: {}", memberRole.getRoleId());
}
} catch (Exception e) {
log.error("查询角色信息失败roleId: {}, 错误: {}", memberRole.getRoleId(), e.getMessage());
}
} else {
log.warn("角色ID为空memberRole: {}", memberRole);
}
} else {
log.warn("未找到成员角色信息memberId: {}", member.getId());
}
} catch (Exception e) {
log.error("获取成员角色信息失败memberId: {}, 错误: {}", member.getId(), e.getMessage());
}
result.add(dto);
}
return result;
}
}

View File

@ -0,0 +1,213 @@
package org.sqa.simply_rugby.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.sqa.simply_rugby.domain.dto.PlayerDTO;
import org.sqa.simply_rugby.domain.dto.PlayerDetailDTO;
import org.sqa.simply_rugby.domain.dto.PlayerPageDTO;
import org.sqa.simply_rugby.domain.entity.Member;
import org.sqa.simply_rugby.domain.entity.Player;
import org.sqa.simply_rugby.domain.entity.PlayerSkillProfile;
import org.sqa.simply_rugby.domain.entity.Team;
import org.sqa.simply_rugby.mapper.PlayerMapper;
import org.sqa.simply_rugby.service.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
@Slf4j
@Service
@RequiredArgsConstructor
public class PlayerServiceImpl extends ServiceImpl<PlayerMapper, Player> implements PlayerService {
private final MemberService memberService;
private final TeamService teamService;
private final PlayerSkillProfileService skillProfileService;
@Override
public Page<Player> page(Integer pageNum, Integer pageSize) {
return page(new Page<>(pageNum, pageSize));
}
@Override
public Page<PlayerPageDTO> pageWithInfo(Integer pageNum, Integer pageSize) {
// 获取球员分页数据
Page<Player> playerPage = page(new Page<>(pageNum, pageSize));
// 创建返回结果
Page<PlayerPageDTO> result = new Page<>(pageNum, pageSize, playerPage.getTotal());
List<PlayerPageDTO> records = new ArrayList<>();
// 转换数据
for (Player player : playerPage.getRecords()) {
PlayerPageDTO dto = new PlayerPageDTO();
// 设置球员基本信息
dto.setId(player.getId());
dto.setPosition(player.getPosition());
dto.setTeamNumber(player.getTeamNumber());
dto.setHeight(player.getHeight());
dto.setWeight(player.getWeight());
dto.setCreateTime(player.getCreateTime());
dto.setGuardian1Name(player.getGuardian1Name());
dto.setGuardian1Tel(player.getGuardian1Tel());
dto.setGuardian2Name(player.getGuardian2Name());
dto.setGuardian2Tel(player.getGuardian2Tel());
dto.setDoctorName(player.getDoctorName());
dto.setDoctorTel(player.getDoctorTel());
dto.setKnownHealthIssues(player.getKnownHealthIssues());
try {
// 获取成员信息
Member member = memberService.getById(player.getMemberId());
if (member != null) {
dto.setName(member.getName());
dto.setAvatar(member.getAvatar());
dto.setSruNumber(member.getSruNumber());
dto.setDateOfBirth(member.getDateOfBirth());
dto.setEmail(member.getEmail());
dto.setTelNumber(member.getTelNumber());
dto.setMobileNumber(member.getMobileNumber());
} else {
log.warn("未找到成员信息memberId: {}", player.getMemberId());
}
// 获取队伍信息
Team team = teamService.getById(player.getTeamId());
if (team != null) {
dto.setTeamName(team.getTeamName());
} else {
log.warn("未找到队伍信息teamId: {}", player.getTeamId());
}
} catch (Exception e) {
log.error("获取球员关联信息失败playerId: {}, 错误: {}", player.getId(), e.getMessage());
}
records.add(dto);
}
result.setRecords(records);
return result;
}
@Override
public Page<Player> pageByTeam(String teamId, Integer pageNum, Integer pageSize) {
LambdaQueryWrapper<Player> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(Player::getTeamId, teamId);
return page(new Page<>(pageNum, pageSize), wrapper);
}
@Override
public List<PlayerDetailDTO> getRandomPlayers(int count) {
// 获取所有球员
List<Player> allPlayers = list();
if (allPlayers.isEmpty()) {
return new ArrayList<>();
}
// 随机选择指定数量的球员
List<Player> selectedPlayers = new ArrayList<>();
Random random = new Random();
int totalPlayers = allPlayers.size();
count = Math.min(count, totalPlayers);
while (selectedPlayers.size() < count) {
int index = random.nextInt(totalPlayers);
Player player = allPlayers.get(index);
if (!selectedPlayers.contains(player)) {
selectedPlayers.add(player);
}
}
// 转换为DTO并填充相关信息
List<PlayerDetailDTO> result = new ArrayList<>();
for (Player player : selectedPlayers) {
PlayerDetailDTO dto = new PlayerDetailDTO();
// 设置位置信息
dto.setPosition(player.getPosition());
// 获取成员信息
Member member = memberService.getById(player.getMemberId());
if (member != null) {
dto.setName(member.getName());
dto.setAvatar(member.getAvatar());
}
// 获取队伍信息
Team team = teamService.getById(player.getTeamId());
if (team != null) {
dto.setTeamName(team.getTeamName());
} else {
dto.setTeamName("Unknown Team");
}
// 获取技能评价
PlayerSkillProfile skillProfile = skillProfileService.getByPlayerId(player.getId());
if (skillProfile != null) {
// 只复制技能评分字段
dto.setPassingStandard(skillProfile.getPassingStandard());
dto.setPassingSpin(skillProfile.getPassingSpin());
dto.setPassingPop(skillProfile.getPassingPop());
dto.setTacklingFront(skillProfile.getTacklingFront());
dto.setTacklingRear(skillProfile.getTacklingRear());
dto.setTacklingSide(skillProfile.getTacklingSide());
dto.setTacklingScrabble(skillProfile.getTacklingScrabble());
dto.setKickingDrop(skillProfile.getKickingDrop());
dto.setKickingPunt(skillProfile.getKickingPunt());
dto.setKickingGrubber(skillProfile.getKickingGrubber());
dto.setKickingGoal(skillProfile.getKickingGoal());
}
result.add(dto);
}
return result;
}
@Override
public PlayerDTO getPlayerWithInfo(String id) {
// 获取球员信息
Player player = this.getById(id);
if (player == null) {
return null;
}
// 获取会员信息
Member member = memberService.getById(player.getMemberId());
if (member == null) {
return null;
}
// 获取球队信息
Team team = teamService.getById(player.getTeamId());
// 构建PlayerDTO对象
PlayerDTO playerDTO = new PlayerDTO();
// 复制球员基本信息
BeanUtils.copyProperties(player, playerDTO);
// 设置会员信息
playerDTO.setName(member.getName());
playerDTO.setAvatar(member.getAvatar());
playerDTO.setSruNumber(member.getSruNumber());
playerDTO.setDateOfBirth(member.getDateOfBirth());
playerDTO.setEmail(member.getEmail());
playerDTO.setTelNumber(member.getTelNumber());
playerDTO.setMobileNumber(member.getMobileNumber());
// 设置球队名称
if (team != null) {
playerDTO.setTeamName(team.getTeamName());
}
return playerDTO;
}
}

View File

@ -0,0 +1,41 @@
package org.sqa.simply_rugby.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import org.sqa.simply_rugby.domain.entity.PlayerSkillProfile;
import org.sqa.simply_rugby.mapper.PlayerSkillProfileMapper;
import org.sqa.simply_rugby.service.PlayerSkillProfileService;
@Service
public class PlayerSkillProfileServiceImpl extends ServiceImpl<PlayerSkillProfileMapper, PlayerSkillProfile> implements PlayerSkillProfileService {
@Override
public Page<PlayerSkillProfile> page(Integer pageNum, Integer pageSize) {
return page(new Page<>(pageNum, pageSize));
}
@Override
public PlayerSkillProfile getByPlayerId(String playerId) {
LambdaQueryWrapper<PlayerSkillProfile> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PlayerSkillProfile::getPlayerId, playerId);
PlayerSkillProfile profile = getOne(wrapper);
if (profile == null) {
// 如果找不到技能档案返回一个空的档案所有评分为0
profile = new PlayerSkillProfile();
profile.setPlayerId(playerId);
profile.setPassingStandard(0);
profile.setPassingSpin(0);
profile.setPassingPop(0);
profile.setTacklingFront(0);
profile.setTacklingRear(0);
profile.setTacklingSide(0);
profile.setTacklingScrabble(0);
profile.setKickingDrop(0);
profile.setKickingPunt(0);
profile.setKickingGrubber(0);
profile.setKickingGoal(0);
}
return profile;
}
}

View File

@ -0,0 +1,28 @@
package org.sqa.simply_rugby.service.impl;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.sqa.simply_rugby.domain.entity.Role;
import org.sqa.simply_rugby.mapper.RoleMapper;
import org.sqa.simply_rugby.service.RoleService;
import java.util.List;
/**
* 角色服务实现类
*/
@Service
@RequiredArgsConstructor
public class RoleServiceImpl implements RoleService {
private final RoleMapper roleMapper;
@Override
public Role getById(String id) {
return roleMapper.selectById(id);
}
@Override
public List<Role> listByIds(List<String> ids) {
return roleMapper.selectBatchIds(ids);
}
}