package com.estate.expert.admin.service.impl; import com.estate.expert.admin.domain.common.option.SelectOptionVo; import com.estate.expert.admin.domain.common.request.PageReq; import com.estate.expert.admin.domain.common.response.PageResp; import com.estate.expert.admin.domain.standard.hierachy.HierarchyIds; import com.estate.expert.admin.domain.user.User; import com.estate.expert.admin.domain.user.UserDto; import com.estate.expert.admin.domain.user.UserRepository; import com.estate.expert.admin.domain.user.UserState; import com.estate.expert.admin.enums.BizResultCode; import com.estate.expert.admin.service.RoleService; import com.estate.expert.admin.service.UserService; import com.estate.expert.admin.service.common.CrudServiceBaseImpl; import com.estate.expert.admin.utils.DataValidator; import com.estate.expert.admin.utils.DeletedObjectUtil; import com.estate.expert.common.utils.PasswordUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; /** * 用户服务实现 **/ @Service public class UserServiceImpl extends CrudServiceBaseImpl implements UserService { @Resource private UserRepository userRepository; @Resource private RoleService roleService; @Resource private HierarchyServiceImpl hierarchyService; final static String SYSTEM_ADMIN = "admin"; public PageResp list(String keyword, Integer roleId, PageReq pageReq) { var page = userRepository.findAllByKeyword(keyword, roleId, pageReq.toPageRequest()); return PageResp.of(page, toDto(page.getContent())); } @Override public PageResp list(String keyword, PageReq pageReq) { return list(keyword, null, pageReq); } @Override public User add(User creator, User user) { BizResultCode.MOBILE_ALREADY_EXIST.check(userRepository.findByMobile(user.getMobile()) != null); BizResultCode.USERNAME_ALREADY_EXIST.check(userRepository.findByName(user.getName()) != null); BizResultCode.MOBILE_FORMAT_ERROR.check(!DataValidator.isValidMobile(user.getMobile())); user.setState(UserState.NORMAL); user.setPassword(PasswordUtils.generate(User.DEFAULT_PASSWORD)); return super.add(creator, user); } @Override public User edit(UserDto user) { BizResultCode.MOBILE_FORMAT_ERROR.check(!DataValidator.isValidMobile(user.getMobile())); return super.edit(user); } @Override public UserDto toDto(User entity) { var hierarchy = hierarchyService.get(HierarchyIds.DEPARTMENT).getContent(); var dto = super.toDto(entity); var department = hierarchy.get(dto.getDepartmentPath()); if(department!=null) dto.setDepartmentName(department.getName()); return dto; } @Override public List toDto(List entityList) { var hierarchy = hierarchyService.get(HierarchyIds.DEPARTMENT); var hs = hierarchy == null ? null : hierarchy.getContent(); var dtos = entityList.stream().map(entityMapper::toDto).toList(); for (var dto : dtos) { if(hs!=null) { var department = hs.get(dto.getDepartmentPath()); if (department != null) dto.setDepartmentName(department.getName()); } var role = roleService.get(dto.getRoleId()); if(role!=null) dto.setRoleName(role.getName()); } return dtos; } public void resetPass(Integer userId) { BizResultCode.INVALID_OPERATION.check(userId.equals(1)); User user = userRepository.findById(userId).orElse(null); BizResultCode.ACCOUNT_NOT_FOUND.check(user == null); user.setPassword(PasswordUtils.generate(User.DEFAULT_PASSWORD)); userRepository.save(user); } public void modifyState(Integer userId, UserState state) { BizResultCode.INVALID_OPERATION.check(userId.equals(1)); User user = userRepository.findById(userId).orElse(null); BizResultCode.ACCOUNT_NOT_FOUND.check(user == null); user.setState(state); userRepository.save(user); } @Override public void updatePersonalInfo(User user, UserDto dto) { BizResultCode.USER_IS_DISABLE.check(user.getState() == UserState.DISABLE); entityMapper.partialUpdate(dto, user); user.setState(UserState.NORMAL); save(user); } @Override public void updatePassword(User user, String oldPassword, String newPassword) { BizResultCode.USER_IS_DISABLE.check(user.getState() == UserState.DISABLE || user.isDeleted()); BizResultCode.PASSWORD_ERROR.check(!PasswordUtils.verify(oldPassword, user.getPassword())); BizResultCode.PASSWORD_FORMAT_ERROR.check(!PasswordUtils.checkPassword(newPassword)); user.setPassword(PasswordUtils.generate(newPassword)); save(user); } @Override protected void beforeDelete(User entity) { BizResultCode.INVALID_OPERATION.check(entity.getId().equals(1)); entity.setMobile(DeletedObjectUtil.toDeletedString(entity.getMobile())); } @Override public User getUserByName(String name) { return userRepository.findByName(name); } @Override public List options(String title) { var list = userRepository.findAllByStateAndDeleted(UserState.NORMAL, false); return SelectOptionVo.buildOptions("所有用户", list); } @Override public User getSystemUser() { return getUserByName(SYSTEM_ADMIN); } @Override public void createSystemUser() { var user = getSystemUser(); if (user != null) { return; } user = new User(); user.setName("admin"); user.setMobile("13800000000"); user.setRoleId(1); user.setPassword(PasswordUtils.generate("jlWiGBvu245c")); user.setState(UserState.NORMAL); super.add(null, user); } @Override public List listActiveUsers(String keyword) { return userRepository.findAllByStateAndDeleted(UserState.NORMAL, false); } }