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<User, UserDto> implements UserService {
|
|
@Resource
|
private UserRepository userRepository;
|
|
@Resource
|
private RoleService roleService;
|
|
@Resource
|
private HierarchyServiceImpl hierarchyService;
|
|
final static String SYSTEM_ADMIN = "admin";
|
|
public PageResp<UserDto> 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<UserDto> 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<UserDto> toDto(List<User> 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<SelectOptionVo> 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<User> listActiveUsers(String keyword) {
|
return userRepository.findAllByStateAndDeleted(UserState.NORMAL, false);
|
}
|
}
|