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 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 map = new HashMap<>(); List departList = (List) ((PageInfo)departService.getAllDepart().getData2()).getList(); List roleList = (List) ((PageInfo)roleService.getAllRole().getData2()).getList(); List 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 list=mapper.selectList(wrapper); return new Response().setII(1,list.size()>0,list,"返回数据"); } //查询所有用户(权限管理用) public Response getAllDocUser() { List list=mapper.getAllDocUser(); return new Response().setII(1,list!=null,list,"数据返回"); } public Response readUserByRoleIds(Integer[] roleIds) { QueryWrapper wrapper=new QueryWrapper(); List integers = Arrays.asList(roleIds); wrapper.in("role_id",integers); wrapper.select("id","name","role_id"); List list=mapper.selectList(wrapper); return new Response().setII(1,list.size()>0,list,"返回数据"); } public boolean checkExists(String userName) { QueryWrapper query = Wrappers.query(); query.eq("name",userName).last(" limit 1"); DocUser docUser = mapper.selectOne(query); return docUser != null; } }