whyclxw
2 天以前 12154b62b42df29173cdc54d7fd35d02d9a6422b
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
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;
    }
}