package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.whyc.dto.Response; import com.whyc.dto.UserClient; import com.whyc.mapper.UserMapper; import com.whyc.pojo.User; import com.whyc.util.ActionUtil; import com.whyc.util.RSAUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; import javax.annotation.Resource; import javax.servlet.ServletContext; import java.security.InvalidParameterException; import java.util.*; import java.util.stream.Collectors; @Service @Slf4j public class UserService { @Resource private UserMapper userMapper; @Resource private UserBridgeService userBridgeService; @Autowired private ApplicationContext applicationContext; public Response add(User user) { try { User userFound = userBridgeService.findPasswordByUserName(user.getName()); if (userFound.getId() != 0) { return new Response<>().set(1, false, "用户已存在"); } if (userMapper.addJudge(user.getName(),user.getPhoneNumber())>0){ return new Response<>().set(1, false, "用户已存在"); } //user.setCreateTime(new Date()); String[] dataArr = RSAUtil.decryptFrontP(user.getPwd(), RSAUtil.fontSeparator); String password = dataArr[0]; String passwordMD5 = dataArr[1]; if(!ActionUtil.EncryptionMD5(password).equals(passwordMD5)){ throw new InvalidParameterException("参数校验失败"); } user.setPwd(RSAUtil.encrypt(password,RSAUtil.getPublicKey())); int flag = userMapper.insert(user); if (flag > 0) { return new Response<>().set(1, true); } else { return new Response<>().set(1, false, "添加失败"); } }catch (Exception e){ e.printStackTrace(); return new Response<>().set(0); } } public Response addByRSA(User user) { User userFound = userBridgeService.findPasswordByUserName(user.getName()); if (userFound.getId() != 0) { return new Response<>().set(1, false, "用户名已存在"); } User userOfPhoneNumber = userBridgeService.getUserByPhoneNumber(user.getPhoneNumber()); if (userOfPhoneNumber.getId()!=0) { return new Response<>().set(1, false, "手机号已存在"); } //String password = URLDecoder.decode(user.getUpassword(), "utf-8"); String password = user.getPwd(); String[] dataArr = RSAUtil.decryptFront(password, RSAUtil.fontSeparator); String pwd = RSAUtil.encrypt(dataArr[0],RSAUtil.getPublicKey()); user.setPwd(pwd); user.setCreateTime(new Date()); int flag = userMapper.insert(user); if (flag > 0) { return new Response<>().set(1, true); } else { return new Response<>().set(1, false, "添加失败"); } } /*public Response registerUser(User user){ try { User userFound = userBridgeService.findPasswordByUserName(user.getName()); if (userFound.getId() != 0) { return new Response<>().set(1, false, "用户名已存在"); } User userOfMobilephone = userBridgeService.findUserByMobilephone(user.getPhoneNumber()); if (userOfMobilephone.getId()!=0) { return new Response<>().set(1, false, "手机号已存在"); } //String password = URLDecoder.decode(user.getUpassword(), "utf-8"); String password = user.getPwd(); String[] dataArr = RSAUtil.decryptFront(password, RSAUtil.fontSeparator); String pwd = RSAUtil.encrypt(dataArr[0],RSAUtil.getPublicKey()); user.setPwd(pwd); int flag = userMapper.insert(user); if (flag > 0) { //添加成功,分配到默认初始化权限组 return new Response<>().set(1, true,"注册成功"); } else { return new Response<>().set(1, false, "注册失败"); } }catch (Exception e){ e.printStackTrace(); return new Response<>().set(0); } }*/ public User getById(int id) { User user = userMapper.selectById(id); user.setPwd((String) ActionUtil.objeNull); return user; } public List getAll() { List users = userMapper.selectList((Wrapper) ActionUtil.objeNull); return users; } public Response getPage(int pageNum,int pageSize) { PageHelper.startPage(pageNum,pageSize); List list = userMapper.selectList((Wrapper) ActionUtil.objeNull); for (User user:list) { user.setPwd((String) ActionUtil.objeNull); } PageInfo pageInfo = new PageInfo<>(list); return new Response().set(1,pageInfo,"查询成功"); } public Response update(User user) { User userFound = userBridgeService.findPasswordByUserName(user.getName()); User userOfPhoneNumber = userBridgeService.getUserByPhoneNumber(user.getPhoneNumber()); if (userFound.getId() != 0 && !userFound.getId().equals(user.getId())) { return new Response().set(1,false,"用户名重复"); } if( userOfPhoneNumber.getId()!=0 && !userFound.getId().equals(user.getId())){ return new Response().set(1,false,"手机号重复"); } user.setPwd(null); if(userMapper.updateById(user)>0){ return new Response().set(1,true,"修改成功"); }else{ return new Response().set(1,false,"修改失败"); } } // 将所有登陆的用户的信息存到application中 public void setApplication(User user) { ServletContext application = ActionUtil.getApplication(); //查看全局中存储的users的Map的key-value集合 Map map = (Map) application.getAttribute("users"); if (map == ActionUtil.objeNull) { map = new HashMap(); } else { //如果集合中有值,则获取当前用户对应的用户信息,key为用户名username,Value为用户名,存储的时间 UserClient client = map.get(user.getName()); if (client != ActionUtil.objeNull) { //已存在 map.remove(user.getName()); } } Long login_time = new Date().getTime(); ActionUtil.getSession().setAttribute("login_time", login_time); map.put(user.getName(), new UserClient(ActionUtil.getRequest().getRemoteAddr(),user,login_time)); application.setAttribute("users", map); } public Response updatePasswordByRSA(User user, String newPwd){ String[] dataArr = RSAUtil.decryptFrontP(newPwd, RSAUtil.fontSeparator); newPwd = dataArr[0]; String passwordMD5 = dataArr[1]; if(!ActionUtil.EncryptionMD5(newPwd).equals(passwordMD5)){ throw new InvalidParameterException("参数校验失败"); } String pwd = RSAUtil.encrypt(newPwd,RSAUtil.getPublicKey()); user.setPwd(pwd); if (userMapper.updateById(user)>0){ return new Response().set(1,true,"新密码修改成功"); }else { return new Response().set(0,false,"新密码修改失败"); } } public List getEmailList() { QueryWrapper query = Wrappers.query(); query.select("email"); query.eq("role_id",2); return userMapper.selectList(query).stream().map(User::getEmail).collect(Collectors.toList()); } }