package space.anyi.petServiceManagementSystem.server.service.impl; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import space.anyi.petServiceManagementSystem.server.common.BusinessException; import space.anyi.petServiceManagementSystem.server.common.PageVo; import space.anyi.petServiceManagementSystem.server.config.PasswordConfig; import space.anyi.petServiceManagementSystem.server.dto.room.QueryByPageParams; import space.anyi.petServiceManagementSystem.server.dto.user.UpdateUserAvatarDto; import space.anyi.petServiceManagementSystem.server.dto.user.UpdateUserPasswordDto; import space.anyi.petServiceManagementSystem.server.dto.user.UpdateUserStatusDto; import space.anyi.petServiceManagementSystem.server.dto.user.UserDto; import space.anyi.petServiceManagementSystem.server.entity.DewormingRecord; import space.anyi.petServiceManagementSystem.server.entity.Pet; import space.anyi.petServiceManagementSystem.server.entity.User; import space.anyi.petServiceManagementSystem.server.entity.VaccinationRecord; import space.anyi.petServiceManagementSystem.server.mapper.UserMapper; import space.anyi.petServiceManagementSystem.server.service.UserService; import space.anyi.petServiceManagementSystem.server.mapper.DewormingRecordMapper; import space.anyi.petServiceManagementSystem.server.mapper.PetMapper; import space.anyi.petServiceManagementSystem.server.mapper.VaccinationRecordMapper; import space.anyi.petServiceManagementSystem.server.util.PageUtil; import space.anyi.petServiceManagementSystem.server.vo.pet.DewormingVo; import space.anyi.petServiceManagementSystem.server.vo.pet.PetVo; import space.anyi.petServiceManagementSystem.server.vo.pet.VaccinationVo; import space.anyi.petServiceManagementSystem.server.vo.user.AdminUserDetailVo; import space.anyi.petServiceManagementSystem.server.vo.user.UserVo; import java.util.List; import java.util.stream.Collectors; @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper userMapper; @Autowired private PasswordConfig passwordConfig; @Autowired private PetMapper petMapper; @Autowired private VaccinationRecordMapper vaccinationRecordMapper; @Autowired private DewormingRecordMapper dewormingRecordMapper; @Override public PageVo queryByPage(QueryByPageParams params) { int offset = (params.getPageNum() - 1) * params.getPageSize(); return PageUtil.page(params.getPageNum(), params.getPageSize(), () -> userMapper.selectByPage(offset, params.getPageSize(), params.getUsername(), params.getAccount(), params.getRole(), params.getEnable()) .stream().map(this::toUserVo).collect(Collectors.toList()), () -> userMapper.countByCondition(params.getUsername(), params.getAccount(), params.getRole(), params.getEnable())); } @Override public UserVo queryById(Long id) { User user = userMapper.selectById(id); return user != null ? toUserVo(user) : null; } @Override @Transactional(rollbackFor = Exception.class) public Boolean add(UserDto dto) { User exist = userMapper.selectByAccount(dto.getAccount()); if (exist != null) { throw new BusinessException("账号已存在"); } User user = new User(); user.setAccount(dto.getAccount()); user.setUsername(dto.getUsername()); user.setPassword(passwordConfig.encrypt(dto.getPassword())); user.setEmail(dto.getEmail()); user.setPhone(dto.getPhone()); user.setAvatar(dto.getAvatar()); user.setRole(dto.getRole() != null ? dto.getRole() : "user"); user.setEnable(dto.getEnable() != null ? dto.getEnable() : 1); return userMapper.insert(user) > 0; } @Override @Transactional(rollbackFor = Exception.class) public Boolean edit(UserDto dto) { User user = new User(); user.setId(dto.getId()); user.setUsername(dto.getUsername()); if (dto.getPassword() != null && !dto.getPassword().isEmpty()) { user.setPassword(passwordConfig.encrypt(dto.getPassword())); } user.setEmail(dto.getEmail()); user.setPhone(dto.getPhone()); user.setAvatar(dto.getAvatar()); user.setRole(dto.getRole()); user.setEnable(dto.getEnable()); return userMapper.update(user) > 0; } @Override @Transactional(rollbackFor = Exception.class) public Boolean deleteByIds(List ids) { return userMapper.deleteByIds(ids) > 0; } @Override @Transactional(rollbackFor = Exception.class) public void updateStatus(UpdateUserStatusDto dto) { userMapper.updateStatus(dto.getId(), dto.getEnable()); } @Override @Transactional(rollbackFor = Exception.class) public void updatePassword(UpdateUserPasswordDto dto) { User user = userMapper.selectById(dto.getId()); if (user == null) { throw new BusinessException("用户不存在"); } if (!passwordConfig.matches(dto.getOldPassword(), user.getPassword())) { throw new BusinessException("旧密码错误"); } userMapper.updatePassword(dto.getId(), passwordConfig.encrypt(dto.getNewPassword())); } @Override @Transactional(rollbackFor = Exception.class) public void updateAvatar(UpdateUserAvatarDto dto) { userMapper.updateAvatar(dto.getId(), dto.getAvatar()); } @Override public AdminUserDetailVo getAdminDetail(Long id) { User user = userMapper.selectById(id); if (user == null) { throw new BusinessException("用户不存在"); } List pets = petMapper.selectByUserId(id); List petVos = pets.stream().map(pet -> { PetVo petVo = toPetVo(pet); petVo.setVaccinations(vaccinationRecordMapper.selectByPetId(pet.getId()).stream() .map(this::toVaccinationVo).collect(Collectors.toList())); petVo.setDewormings(dewormingRecordMapper.selectByPetId(pet.getId()).stream() .map(this::toDewormingVo).collect(Collectors.toList())); return petVo; }).collect(Collectors.toList()); AdminUserDetailVo detail = new AdminUserDetailVo(); detail.setUser(toUserVo(user)); detail.setPets(petVos); return detail; } private PetVo toPetVo(Pet pet) { PetVo vo = new PetVo(); vo.setId(pet.getId()); vo.setUserId(pet.getUserId()); vo.setName(pet.getName()); vo.setSpecies(pet.getSpecies()); vo.setBreed(pet.getBreed()); vo.setGender(pet.getGender()); vo.setBirthDate(pet.getBirthDate()); vo.setWeight(pet.getWeight()); vo.setAvatar(pet.getAvatar()); vo.setRemark(pet.getRemark()); vo.setCreatedAt(pet.getCreatedAt()); return vo; } private VaccinationVo toVaccinationVo(VaccinationRecord r) { VaccinationVo vo = new VaccinationVo(); vo.setId(r.getId()); vo.setPetId(r.getPetId()); vo.setVaccineName(r.getVaccineName()); vo.setVaccineDate(r.getVaccineDate()); vo.setHospital(r.getHospital()); vo.setDoctor(r.getDoctor()); vo.setRemark(r.getRemark()); vo.setCreatedAt(r.getCreatedAt()); return vo; } private DewormingVo toDewormingVo(DewormingRecord r) { DewormingVo vo = new DewormingVo(); vo.setId(r.getId()); vo.setPetId(r.getPetId()); vo.setDewormingName(r.getDewormingName()); vo.setDewormingDate(r.getDewormingDate()); vo.setHospital(r.getHospital()); vo.setDoctor(r.getDoctor()); vo.setRemark(r.getRemark()); vo.setCreatedAt(r.getCreatedAt()); return vo; } private UserVo toUserVo(User user) { UserVo vo = new UserVo(); vo.setId(user.getId()); vo.setUsername(user.getUsername()); vo.setAccount(user.getAccount()); vo.setEmail(user.getEmail()); vo.setPhone(user.getPhone()); vo.setAvatar(user.getAvatar()); vo.setRole(user.getRole()); vo.setEnable(user.getEnable()); return vo; } }