whyclxw
2025-03-13 90f2637328f765b3db59333b8c615e61e3365afc
src/main/java/com/whyc/service/DocUserService.java
@@ -1,21 +1,32 @@
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.constant.YamlProperties;
import com.whyc.dto.Page;
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.boot.system.ApplicationHome;
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.List;
import java.util.*;
import static com.whyc.util.ActionUtil.createFilefolderIFNotExist;
@@ -27,15 +38,24 @@
    @Autowired
    private DocFaceService faceService;
    @Autowired
    private DocRoleService roleService;
    @Autowired
    private DocDepartService departService;
    @Autowired
    private PermitService permitService;
    //查询所有用户信息
    public Response getAllUser(Page page) {
        PageHelper.startPage(page.getPageCurr(),page.getPageSize());
        List<DocUser> list=mapper.getAllUser();
    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?true:false,pageInfo,"数据返回");
        return new Response().setII(1,list!=null,pageInfo,"数据返回");
    }
    //编辑所有用户信息
    public Response updateAllUser(MultipartFile file,DocUser docUser) {
    public Response updateUser(MultipartFile file,DocUser docUser) {
        int faceId=(docUser.getFaceId()==null||docUser.getFaceId().isEmpty())?0:Integer.valueOf(docUser.getFaceId());
        //检测是否存在重新上传的人脸
        faceId=checkFaceData(file,faceId);
@@ -45,34 +65,36 @@
        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?true:false);
        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?true:false);
        return new Response().set(1,bl>0);
    }
    //检测是否存在重新上传的人脸
    public int checkFaceData(MultipartFile file,int faceId){
        String fileDirName = "";
        ApplicationHome applicationHome = new ApplicationHome(getClass());
        File jarFile = applicationHome.getDir();
        if( 1 == YamlProperties.runModel){
            fileDirName = jarFile.getParentFile().toString();
        }else{
            //打包版
            fileDirName = jarFile.toString();
        }
        String root=fileDirName+"/face/"+File.separator;
        if(file.isEmpty()){
            faceId=0;
        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;
@@ -94,4 +116,98 @@
        }
        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;
    }
}