package com.izouma.nineth.service; import com.izouma.nineth.config.Constants; import com.izouma.nineth.domain.Company; import com.izouma.nineth.domain.User; import com.izouma.nineth.dto.PageQuery; import com.izouma.nineth.enums.AuthorityName; import com.izouma.nineth.exception.BusinessException; import com.izouma.nineth.repo.CompanyRepo; import com.izouma.nineth.repo.UserRepo; import com.izouma.nineth.security.Authority; import com.izouma.nineth.utils.JpaUtils; import com.izouma.nineth.utils.SecurityUtils; import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.util.Collections; @Service @AllArgsConstructor public class CompanyService { private CompanyRepo companyRepo; private UserRepo userRepo; private PasswordEncoder passwordEncoder; private CacheService cacheService; public Page all(PageQuery pageQuery) { return companyRepo.findAll(JpaUtils.toSpecification(pageQuery, Company.class), JpaUtils.toPageRequest(pageQuery)); } public void addAdmin(Long companyId, String username, String password) { if (!SecurityUtils.hasRole(AuthorityName.ROLE_ADMIN) && !companyId.equals(SecurityUtils.getAuthenticatedUser().getCompanyId())) { throw new BusinessException("无权限"); } userRepo.save(User.builder() .avatar(Constants.DEFAULT_AVATAR) .username(username) .password(passwordEncoder.encode(password)) .companyId(companyId) .authorities(Collections.singleton(Authority.get(AuthorityName.ROLE_SAAS))) .admin(true) .build()); cacheService.clearUserList(); } public void delAdmin(Long companyId, Long userId) { if (!SecurityUtils.hasRole(AuthorityName.ROLE_ADMIN) && !companyId.equals(SecurityUtils.getAuthenticatedUser().getCompanyId())) { throw new BusinessException("无权限"); } userRepo.deleteById(userId); cacheService.clearUserList(); } }