package com.thhy.usercore.modules.sys.sysusers.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.thhy.general.config.GlobalConfig; import com.thhy.general.utils.DeepCopyUtils; import com.thhy.general.utils.PagingUtils; import com.thhy.general.utils.UUIDUtils; import com.thhy.general.utils.password.PasswdUtils; import com.thhy.general.utils.UserInfoUtils; import com.thhy.general.common.BasicStatus; import com.thhy.general.exception.BasicException; import com.thhy.usercore.modules.sys.sysuserrole.entity.SysUserRole; import com.thhy.usercore.modules.sys.sysuserrole.mapper.SysUserRoleMapper; import com.thhy.general.config.SysUserInfo; import com.thhy.usercore.modules.sys.sysusers.entity.CompanySu; import com.thhy.usercore.modules.sys.sysusers.entity.SysUsers; import com.thhy.usercore.modules.sys.sysusers.entity.UserDto; import com.thhy.usercore.modules.sys.sysusers.entity.UserPassDto; import com.thhy.usercore.modules.sys.sysusers.mapper.SysUsersMapper; import com.thhy.usercore.modules.sys.sysusers.service.ISysUsersService; import org.redisson.api.RBucket; import org.redisson.api.RedissonClient; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.RequestBody; import javax.servlet.http.HttpServletRequest; import java.io.Serializable; import java.util.Date; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.concurrent.TimeUnit; /** *

* 服务实现类 *

* * @author zhang_xiao_bo * @since 2022-03-22 */ @Service public class SysUsersServiceImpl implements ISysUsersService { @Autowired private SysUsersMapper sysUsersMapper; @Autowired private SysUserRoleMapper sysUserRoleMapper; @Autowired private RedissonClient redissonClient; @Autowired private GlobalConfig globalConfig; public SysUsers get(Serializable id){ return sysUsersMapper.queryById(id); } public List findList(UserDto userDto,HttpServletRequest req){ SysUserInfo userInfo = UserInfoUtils.getInstance().getUserInfo(); SysUsers sysUsers = sysUsersMapper.queryById(userInfo.getUserId()); PagingUtils.setPageParam(req); if(sysUsers.getIsPlat()==1||sysUsers.getSubAdmin()==1){ if (userDto == null) userDto = new UserDto(); userDto.setCompanyId(userInfo.getCompanyId()); return sysUsersMapper.findListWithAccess(userDto); }else { return sysUsersMapper.findList(userDto); } } @Transactional public SysUsers addUser(UserDto userDto){ SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); SysUsers sysUsers = new SysUsers(); DeepCopyUtils.copy(userDto,sysUsers); if(sysUsers.getUserId()==null){ //添加用户 SysUsers phoneUsers = sysUsersMapper.queryByPhone(userDto.getTelphone()); if(phoneUsers!=null){ throw new BasicException(BasicStatus.USER_PHONE_IS_EXIST); //手机号已存在 } SysUsers userNameUsers = sysUsersMapper.queryByUsername(userDto.getUsername()); if(userNameUsers!=null){ throw new BasicException(BasicStatus.USER_NAME_IS_EXIST); //用户名已存在 } sysUsers.setCreateTime(new Date()); sysUsers.setCreateUser(sysUserInfo.getUserId()); //密码加密 String newPassword = PasswdUtils.encodePassword(sysUsers.getPassword()); sysUsers.setPassword(newPassword); if(!com.alibaba.nacos.api.utils.StringUtils.isEmpty(sysUserInfo.getCompanyId())){ sysUsers.setSubAdmin(1); } sysUsersMapper.insert(sysUsers); if(!com.alibaba.nacos.api.utils.StringUtils.isEmpty(sysUserInfo.getCompanyId())){ sysUsersMapper.insertCompanyUser(new CompanySu(sysUserInfo.getCompanyId(),sysUsers.getUserId())); } }else{ //修改用户 //检验版本 SysUsers currentUserInfo = sysUsersMapper.queryById(sysUsers.getUserId()); //Integer curVersion = sysUsersMapper.queryVersionById(sysUsers.getUserId()); System.out.println("################################"+ sysUsers.getVersion()); System.out.println("################################"+ currentUserInfo.getVersion()); if(!currentUserInfo.getVersion().equals(sysUsers.getVersion())){ throw new BasicException(BasicStatus.SUBMIT_TIMEOUT); } //手机唯一 if(!currentUserInfo.getTelphone().equals(sysUsers.getTelphone())){ SysUsers phoneUsers = sysUsersMapper.queryByPhone(userDto.getTelphone()); if(phoneUsers!=null){ throw new BasicException(BasicStatus.USER_PHONE_IS_EXIST); } } if(currentUserInfo.getUsername()==null||!currentUserInfo.getUsername().equals(sysUsers.getUsername())){ SysUsers userNameUsers = sysUsersMapper.queryByUsername(userDto.getUsername()); if(userNameUsers!=null){ throw new BasicException(BasicStatus.USER_NAME_IS_EXIST); //用户名已存在 } } sysUsersMapper.update(sysUsers); } return sysUsers; } /** * 逻辑删除 * @param id */ @Transactional public int deletelogic(Serializable id){ HashMap map = (LinkedHashMap) id; String userId = map.get("id").toString(); SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); //SysUsers currentUserInfo = sysUsersMapper.queryById(id); if(userId.equals(sysUserInfo.getUserId())){ throw new BasicException(BasicStatus.FORBIDEN_DELETE_SELF); } SysUsers sysUsers = sysUsersMapper.queryById(userId); if("admin".equals(sysUsers.getUsername())){ throw new BasicException(BasicStatus.FORBIDEN_DELETE_ADMIN); } if(sysUsers.getIsPlat()==1|| !com.alibaba.nacos.api.utils.StringUtils.isEmpty(sysUsers.getPlatId())){ sysUsersMapper.nologin(sysUsers.getPlatId()); sysUsersMapper.deleteApplyHistory(sysUsers.getPlatId()); } return sysUsersMapper.deletelogic(id); } /** * 为用户添加角色信息 * @param userDto * @param req */ @Override @Transactional public void updateUserRole(UserDto userDto, HttpServletRequest req) { //先删除目前的权限 String userId = userDto.getUserId(); sysUserRoleMapper.deleteByUserId(userId); String roleIds = userDto.getRoleIds(); if(StringUtils.isEmpty(roleIds)){ throw new BasicException(BasicStatus.ROLE_INFO_IS_NOT_NULL); //角色信息不能为空 } String[] roleIdArray = new String[]{roleIds}; if(roleIds.contains(",")){ roleIdArray = roleIds.split(","); } for(String role : roleIdArray){ sysUserRoleMapper.insert(new SysUserRole(userId,role)); } } /*@Override @Transactional public void updateDepartForUser(UserDepartDto userDepartDto) { //先删除所有 sysUserDepartMapper.deleteByUserId(userDepartDto.getUserId().toString()); if (!StringUtils.isEmpty(userDepartDto.getDepartIds())) { String departIds = userDepartDto.getDepartIds(); String[] departIdArray = new String[]{departIds}; if(departIds.contains(",")){ departIdArray = departIds.split(","); } for(String departId : departIdArray){ sysUserDepartMapper.insert(new SysUserDepart(userDepartDto.getUserId().toString(),departId)); } } }*/ @Override public int queryVersion(Serializable id) { return sysUsersMapper.queryVersionById(id); } @Override @Transactional public void updatePass(UserPassDto userPassDto) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); SysUsers sysUsers = sysUsersMapper.queryById(sysUserInfo.getUserId()); //解析并校验密码 boolean result = PasswdUtils.validatePassword(userPassDto.getOldPass(),sysUsers.getPassword()); if(!result){ throw new BasicException(BasicStatus.OLDPASS_IS_ERROR); } //密码加密 String newPassword = PasswdUtils.encodePassword(userPassDto.getNewPass()); sysUsers.setPassword(newPassword); sysUsersMapper.updateUserPass(sysUsers); } @Override public String getAuthCode(String param,HttpServletRequest request) { SysUserInfo sysUserInfo = UserInfoUtils.getInstance().getUserInfo(); String code = UUIDUtils.create(); RBucket rBucket = redissonClient.getBucket(globalConfig.getFilePreKey()+":authcode:"+code); JSONObject jsonObject = JSON.parseObject(param); jsonObject.put("token",request.getHeader("usertoken")); rBucket.set(jsonObject.toJSONString(),10, TimeUnit.MINUTES); return code; } }