package com.whyc.service;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.whyc.dto.FileDirPath;
|
import com.whyc.dto.Response;
|
import com.whyc.mapper.DocUserMapper;
|
import com.whyc.pojo.DocDepart;
|
import com.whyc.pojo.DocRole;
|
import com.whyc.pojo.DocUser;
|
import com.whyc.pojo.Permit;
|
import com.whyc.util.ActionUtil;
|
import com.whyc.util.RSAUtil;
|
import org.apache.shiro.SecurityUtils;
|
import org.apache.shiro.authc.UnknownAccountException;
|
import org.apache.shiro.authc.UsernamePasswordToken;
|
import org.apache.shiro.subject.Subject;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.web.multipart.MultipartFile;
|
|
import javax.servlet.ServletContext;
|
import javax.servlet.http.HttpServletRequest;
|
import java.io.File;
|
import java.io.IOException;
|
import java.util.*;
|
|
import static com.whyc.util.ActionUtil.createFilefolderIFNotExist;
|
|
@Service
|
public class DocUserService {
|
@Autowired(required = false)
|
private DocUserMapper mapper;
|
|
@Autowired
|
private DocFaceService faceService;
|
|
@Autowired
|
private DocRoleService roleService;
|
|
@Autowired
|
private DocDepartService departService;
|
|
@Autowired
|
private PermitService permitService;
|
|
//查询所有用户信息
|
public Response getAllUser(DocUser docUser, int pageCurr, int pageSize) {
|
PageHelper.startPage(pageCurr,pageSize);
|
List<DocUser> list=mapper.getAllUser(docUser);
|
PageInfo pageInfo=new PageInfo(list);
|
return new Response().setII(1,list!=null,pageInfo,"数据返回");
|
}
|
//编辑所有用户信息
|
public Response updateUser(MultipartFile file,DocUser docUser) {
|
int faceId=(docUser.getFaceId()==null||docUser.getFaceId().isEmpty())?0:Integer.valueOf(docUser.getFaceId());
|
//检测是否存在重新上传的人脸
|
faceId=checkFaceData(file,faceId);
|
UpdateWrapper wrapper=new UpdateWrapper();
|
wrapper.set("tel",docUser.getTel());
|
wrapper.set("phone",docUser.getPhone());
|
wrapper.set("depart_id",docUser.getDepartId());
|
wrapper.set("face_id",faceId);
|
wrapper.set("role_id",docUser.getRoleId());
|
wrapper.set("mail",docUser.getMail());
|
wrapper.eq("id",docUser.getId());
|
int bl=mapper.update(null,wrapper);
|
return new Response().set(1,bl>0);
|
}
|
//新添加用户信息
|
public Response addUser(MultipartFile file,DocUser docUser) {
|
QueryWrapper wrapper=new QueryWrapper();
|
String pwd= RSAUtil.encrypt("123456", RSAUtil.getPublicKey());
|
docUser.setSnId(pwd);
|
wrapper.eq("name",docUser.getName());
|
List list=mapper.selectList(wrapper);
|
if(list!=null&&list.size()>0){
|
return new Response().setII(1,false,list,"用户名已存在");
|
}
|
int faceId=(docUser.getFaceId()==null||docUser.getFaceId().isEmpty())?0:Integer.valueOf(docUser.getFaceId());
|
//检测是否存在重新上传的人脸
|
faceId=checkFaceData(file,faceId);
|
docUser.setFaceId(String.valueOf(faceId));
|
docUser.setCreTime(new Date());
|
int bl=mapper.insert(docUser);
|
return new Response().set(1,bl>0);
|
}
|
|
//检测是否存在重新上传的人脸
|
public int checkFaceData(MultipartFile file,int faceId){
|
String fileDirName = FileDirPath.getFileDirName();
|
String root=fileDirName+File.separator+"face"+File.separator;
|
if(file==null){
|
return faceId;
|
}else{
|
String fileFileName = file.getOriginalFilename();
|
String filePath = root + fileFileName;
|
createFilefolderIFNotExist(filePath);
|
try {
|
file.transferTo(new File(filePath));
|
} catch (IOException e) {
|
e.printStackTrace();
|
}
|
if(faceId==0){
|
//插入新图片同时获取人脸id
|
faceId=faceService.getNewFaceId();
|
//录入新的人脸
|
faceService.setNewFace(faceId,filePath);
|
}else{
|
//修改旧的人脸
|
faceService.updateFace(faceId,filePath);
|
}
|
}
|
return faceId;
|
}
|
//删除用户信息
|
public Response delUser(int id) {
|
UpdateWrapper wrapper=new UpdateWrapper();
|
wrapper.eq("id",id);
|
int bl=mapper.delete(wrapper);
|
return new Response().setII(1,bl>0,bl,"删除返回");
|
}
|
|
public Response login(String name, String snId, HttpServletRequest request) {
|
Response response = new Response();
|
String[] dataArr = RSAUtil.decryptFrontP(snId, RSAUtil.fontSeparator);
|
//验签md5
|
if (!dataArr[1].equals(ActionUtil.EncryptionMD5(org.apache.commons.lang3.StringUtils.trim(dataArr[0])).toString())) {
|
return response.set(1, false, "密码验签失败");
|
}
|
UsernamePasswordToken userToken = new UsernamePasswordToken(name, dataArr[0]);
|
Subject subject = SecurityUtils.getSubject();
|
try {
|
subject.login(userToken);
|
} catch (Exception e) {
|
if(e instanceof UnknownAccountException){
|
return response.set(1,false,"账号不存在");
|
}
|
return response.set(1,false,"密码错误");
|
}
|
//登录成功
|
ServletContext servletContext = request.getServletContext();
|
servletContext.setAttribute(name, request.getSession().getId());
|
//Session存储当前用户及权限组列表
|
DocUser userDB = (DocUser) subject.getPrincipal();
|
userDB.setSnId(null);
|
request.getSession().setAttribute("user", userDB);
|
//查询角色和部门列表信息
|
Map<String,Object> map = new HashMap<>();
|
List<DocDepart> departList = (List<DocDepart>) ((PageInfo)departService.getAllDepart().getData2()).getList();
|
List<DocRole> roleList = (List<DocRole>) ((PageInfo)roleService.getAllRole().getData2()).getList();
|
List<Permit> permitList = permitService.getPermitsByUname();
|
map.put("departs",departList);
|
map.put("roles",roleList);
|
map.put("permits",permitList);
|
return response.setIII(1,true, userDB,map,"登录成功");
|
}
|
//修改密码
|
public Response changeSnId(String name,String oldSnId, String newSnId) {
|
if(name==null||name.equals("")){
|
return new Response().set(1,false,"找不到用户");
|
}
|
//验证老密码是否正确
|
String snIdRsa=mapper.selectSnId(name);
|
//解密
|
String snId=RSAUtil.decrypt(snIdRsa,RSAUtil.getPrivateKey());
|
String[] decOld=RSAUtil.decryptFrontP(oldSnId,RSAUtil.fontSeparator);
|
String oldId=decOld[0];
|
String[] newOld=RSAUtil.decryptFrontP(newSnId,RSAUtil.fontSeparator);
|
String newId=newOld[0];
|
if(oldId.equals(snId)){
|
UpdateWrapper wrapper=new UpdateWrapper();
|
wrapper.set("sn_id",RSAUtil.encrypt(newId,RSAUtil.getPublicKey()));
|
wrapper.eq("name",name);
|
int bl=mapper.update(null,wrapper);
|
return new Response().set(1,bl>0,"修改成功");
|
}else {
|
return new Response().set(1,false,"修改失败");
|
}
|
}
|
//根据角色id查询对应的用户
|
public Response getUserByRoleId(int roleId) {
|
QueryWrapper wrapper=new QueryWrapper();
|
wrapper.eq("role_id",roleId);
|
wrapper.select("id","name");
|
List<DocUser> list=mapper.selectList(wrapper);
|
return new Response().setII(1,list.size()>0,list,"返回数据");
|
}
|
//查询所有用户(权限管理用)
|
public Response getAllDocUser() {
|
List<DocUser> list=mapper.getAllDocUser();
|
return new Response().setII(1,list!=null,list,"数据返回");
|
}
|
|
public Response readUserByRoleIds(Integer[] roleIds) {
|
QueryWrapper wrapper=new QueryWrapper();
|
List<Integer> integers = Arrays.asList(roleIds);
|
wrapper.in("role_id",integers);
|
wrapper.select("id","name","role_id");
|
List<DocUser> list=mapper.selectList(wrapper);
|
return new Response().setII(1,list.size()>0,list,"返回数据");
|
}
|
|
public boolean checkExists(String userName) {
|
QueryWrapper<DocUser> query = Wrappers.query();
|
query.eq("name",userName).last(" limit 1");
|
DocUser docUser = mapper.selectOne(query);
|
return docUser != null;
|
}
|
}
|