package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
|
import com.baomidou.mybatisplus.extension.api.R;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.whyc.dto.Response;
|
import com.whyc.dto.UserLoginInfo;
|
import com.whyc.mapper.UserMapper;
|
import com.whyc.pojo.User;
|
import com.whyc.util.DigestsUtil;
|
import lombok.extern.slf4j.Slf4j;
|
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.authc.UsernamePasswordToken;
|
import org.apache.shiro.subject.Subject;
|
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 javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpSession;
|
import java.util.Date;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
import static com.baomidou.mybatisplus.core.toolkit.Wrappers.*;
|
|
@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.findPasswordAndSlatByUserName(user.getName());
|
if (userFound.getId() != 0) {
|
return new Response<>().set(1, false, "用户已存在");
|
}
|
user.setCreateTime(new Date());
|
user.setState(0);
|
Map<String, String> encryptMap = DigestsUtil.encryptPassword(user.getPassword());
|
user.setPassword(encryptMap.get("password"));
|
user.setSalt(encryptMap.get("salt"));
|
if (userMapper.insert(user) > 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 boolean addBatch(List<User> roles) {
|
return userMapper.insertBatchSomeColumn(roles) == roles.size();
|
}
|
|
|
public User getById(int id) {
|
return userMapper.selectById(id);
|
}
|
|
|
public List<User> getAll() {
|
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
|
queryWrapper.ne("name","superadmin");
|
List<User> users = userMapper.selectList(queryWrapper);
|
return users;
|
}
|
|
public IPage<User> getAllWithPage(Page page) {
|
return userMapper.selectPage(page, null);
|
}
|
|
public Response<IPage<User>> getPageByCondition(int pageNum, int pageSize, User user) {
|
QueryWrapper<User> queryWrapper = new QueryWrapper<>(user);
|
queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "name", user.getSearch());
|
queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "real_name", user.getSearch());
|
queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "phone", user.getSearch());
|
queryWrapper.or().like(StringUtils.isNotEmpty(user.getSearch()), "email", user.getSearch());
|
queryWrapper.ne("name","superadmin");
|
IPage<User> page = userMapper.selectPage(new Page<>(pageNum, pageSize), queryWrapper);
|
return new Response<IPage<User>>().set(1, page);
|
}
|
|
|
public boolean validatePassword(String userName, String password) {
|
User user = userBridgeService.findPasswordAndSlatByUserName(userName);
|
boolean result = user.getPassword().equals(DigestsUtil.sha1(password, user.getSalt()));
|
return result;
|
}
|
|
public Response update(User user) {
|
if(StringUtils.isNotEmpty(user.getPassword())){
|
String password = DigestsUtil.sha1(user.getPassword(),user.getSalt());
|
user.setPassword(password);
|
}
|
if (userMapper.updateById(user) > 0) {
|
return new Response().setMsg(1, "更新成功");
|
} else {
|
return new Response().setMsg(0, "更新失败");
|
}
|
}
|
|
public Response updateUserFreeze(int id, int state) {
|
User user = userMapper.selectById(id);
|
user.setState(state);
|
if (userMapper.updateById(user) > 0) {
|
if (state == 0) {
|
return new Response().setMsg(1, "启用成功");
|
} else {
|
return new Response().setMsg(1, "冻结成功");
|
}
|
} else {
|
return new Response().setMsg(0, "更新失败");
|
}
|
}
|
|
|
public Response delete(int id) {
|
if (userMapper.deleteById(id) > 0) {
|
return new Response().setMsg(1, "删除成功");
|
} else {
|
return new Response().setMsg(0, "删除失败");
|
}
|
}
|
|
public boolean login(String username, String password, HttpServletRequest request) {
|
boolean flag = false;
|
//查询用户名和密码是否正确
|
QueryWrapper<User> queryWrapper = query();
|
queryWrapper.eq("name", username).eq("password", password);
|
User user = userMapper.selectOne(queryWrapper);
|
if (user != null) {
|
flag = true;
|
//session中存储用户信息,设置有效期30分钟
|
HttpSession session = request.getSession();
|
long timestamp = System.currentTimeMillis();
|
session.setAttribute("user", user);
|
session.setAttribute("timestamp", timestamp);
|
session.setMaxInactiveInterval(1800);
|
|
//servletContext中存储用户信息
|
ServletContext servletContext = request.getServletContext();
|
Map<String, UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users");
|
if (userMap == null) {
|
log.info("servletContext首次存值");
|
userMap = new HashMap<>();
|
userMap.put(username, new UserLoginInfo(username, timestamp));
|
servletContext.setAttribute("users", userMap);
|
} else {
|
log.info("servletContext已经有值");
|
userMap.put(username, new UserLoginInfo(username, timestamp));
|
servletContext.setAttribute("users", userMap);
|
}
|
}
|
return flag;
|
}
|
|
public boolean loginCheck(HttpServletRequest request) {
|
boolean flag = false;
|
|
ServletContext servletContext = request.getServletContext();
|
HttpSession session = request.getSession();
|
|
User user = (User) session.getAttribute("user");
|
Long timestamp = (Long) session.getAttribute("timestamp");
|
|
if (user == null) {
|
return false;
|
}
|
Map<String, UserLoginInfo> userMap = (Map<String, UserLoginInfo>) servletContext.getAttribute("users");
|
|
UserLoginInfo userLoginInfo = userMap.get(user.getName());
|
if (userLoginInfo.getUsername().equals(user.getName()) && userLoginInfo.getTimestamp().compareTo(timestamp) == 0) {
|
//说明没有从其他地方登录
|
} else {
|
//说明从其他地方登录了,当前用户的session清除
|
flag = true;
|
session.invalidate();
|
}
|
return flag;
|
}
|
}
|