From 76ceb3eb8d2de784284e100b7f2f694d6db5ba2b Mon Sep 17 00:00:00 2001 From: whyclxw <810412026@qq.com> Date: 星期二, 13 五月 2025 17:09:30 +0800 Subject: [PATCH] 用户管理 --- src/main/java/com/whyc/service/UserService.java | 411 +++++++++++++++++++++++++++++++++++++++------------------ 1 files changed, 279 insertions(+), 132 deletions(-) diff --git a/src/main/java/com/whyc/service/UserService.java b/src/main/java/com/whyc/service/UserService.java index 11af560..cead935 100644 --- a/src/main/java/com/whyc/service/UserService.java +++ b/src/main/java/com/whyc/service/UserService.java @@ -1,201 +1,348 @@ package com.whyc.service; import com.baomidou.mybatisplus.core.conditions.Wrapper; +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.Response; import com.whyc.dto.UserClient; +import com.whyc.mapper.BaojigroupUsrMapper; +import com.whyc.mapper.PermitGroupUserMapper; import com.whyc.mapper.UserMapper; import com.whyc.pojo.db_user.User; +import com.whyc.util.ActionUtil; import com.whyc.util.CommonUtil; +import com.whyc.util.MD5Util; import com.whyc.util.RSAUtil; import lombok.extern.slf4j.Slf4j; +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.cache.annotation.CacheEvict; import org.springframework.cache.annotation.Cacheable; import org.springframework.context.ApplicationContext; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.security.InvalidParameterException; import java.util.*; +import java.util.stream.Collectors; @Service @Slf4j public class UserService { @Resource - private UserMapper userMapper; + private UserMapper mapper; - @Resource - private UserBridgeService userBridgeService; + @Autowired(required = false) + private BaojigroupUsrMapper bjgroupUsrMapper; - @Autowired - private ApplicationContext applicationContext; + @Autowired(required = false) + private PermitGroupUserMapper pergroupUserMapper; + //鏌ヨ鎵�鏈夌敤鎴蜂俊鎭� + public Response getAllUser(String uname, String realName, int pageCurr, int pageSize) { + PageHelper.startPage(pageCurr,pageSize); + List<User> list=mapper.getAllUser(uname,realName); + PageInfo pageInfo=new PageInfo(list); + return new Response().setII(1,list!=null,pageInfo,"鏌ヨ鎵�鏈夌敤鎴蜂俊鎭�"); + } - public Response add(User user) { - try { - User userFound = userBridgeService.findPasswordByUserName(user.getName()); - if (userFound.getId() != 0) { - return new Response<>().set(1, false, "鐢ㄦ埛宸插瓨鍦�"); - } - if (userMapper.addJudge(user.getName(),user.getPhoneNumber())>0){ - return new Response<>().set(1, false, "鐢ㄦ埛宸插瓨鍦�"); - } - //user.setCreateTime(new Date()); - String[] dataArr = RSAUtil.decryptFrontP(user.getPwd(), RSAUtil.fontSeparator); - String password = dataArr[0]; - String passwordMD5 = dataArr[1]; - if(!CommonUtil.EncryptionMD5(password).equals(passwordMD5)){ - throw new InvalidParameterException("鍙傛暟鏍¢獙澶辫触"); - } - user.setPwd(RSAUtil.encrypt(password,RSAUtil.getPublicKey())); - int flag = userMapper.insert(user); - if (flag > 0) { - return new Response<>().set(1, true); - } else { - return new Response<>().set(1, false, "娣诲姞澶辫触"); - } - }catch (Exception e){ - e.printStackTrace(); - return new Response<>().set(0); + //鏂版坊鍔犵敤鎴蜂俊鎭� + @Transactional + public Response addUser(User uinf) { + QueryWrapper wrapper=new QueryWrapper(); + //鍒ゆ柇鏄惁瀛樺湪鏅�氱敤鎴�(uid>100)锛岃嫢鏃�,鍒濆涓�10001 + int judgecount=mapper.judgeUname(); + if(judgecount==0){ + uinf.setId(10001); + } + String pwd= RSAUtil.encrypt("123456", RSAUtil.getPublicKey()); + uinf.setPwd(pwd); + wrapper.select("uid","uname"); + wrapper.eq("uname",uinf.getName()); + User user=mapper.selectOne(wrapper); + if(user!=null){ + return new Response().setII(1,false,user,"鐢ㄦ埛鍚嶅凡瀛樺湪"); + } + uinf.setCreateTime(new Date()); + int bl=mapper.insert(uinf); + return new Response().set(1,bl>0); + } + //淇敼瀵嗙爜 + public Response changeSnId(String uname,String oldSnId, String newSnId) { + if(uname==null||uname.equals("")){ + return new Response().set(1,false,"鎵句笉鍒扮敤鎴�"); + } + //楠岃瘉鑰佸瘑鐮佹槸鍚︽纭� + String snIdRsa=mapper.selectSnId(uname); + //瑙e瘑 + 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("usnid",RSAUtil.encrypt(newId,RSAUtil.getPublicKey())); + wrapper.eq("uname",uname); + int flag=mapper.update(null,wrapper); + return new Response().set(1,flag>0,flag>0?"淇敼鎴愬姛":"淇敼澶辫触"); + }else { + return new Response().set(1,false,"鍘熷瘑鐮佷笉姝g‘"); } } - @CacheEvict(value = "userPage",allEntries = true) - public Response addByRSA(User user) { - User userFound = userBridgeService.findPasswordByUserName(user.getName()); - if (userFound.getId() != 0) { - return new Response<>().set(1, false, "鐢ㄦ埛鍚嶅凡瀛樺湪"); - } - User userOfPhoneNumber = userBridgeService.getUserByPhoneNumber(user.getPhoneNumber()); - if (userOfPhoneNumber.getId()!=0) { - return new Response<>().set(1, false, "鎵嬫満鍙峰凡瀛樺湪"); - } - //String password = URLDecoder.decode(user.getUpassword(), "utf-8"); - String password = user.getPwd(); - String[] dataArr = RSAUtil.decryptFront(password, RSAUtil.fontSeparator); - String pwd = RSAUtil.encrypt(dataArr[0],RSAUtil.getPublicKey()); - user.setPwd(pwd); - user.setCreateTime(new Date()); - int flag = userMapper.insert(user); - if (flag > 0) { - return new Response<>().set(1, true); + //鏍¢獙瀵嗙爜 + public Response checkSnId(String uname, String checksnId) { + //鏌ヨ褰撳墠鐢ㄦ埛鐨勫瘑鐮� + String snIdRsa = mapper.selectSnId(uname); + String snId = RSAUtil.decrypt(snIdRsa, RSAUtil.getPrivateKey()); + String[] oldchecksnId = RSAUtil.decryptFrontP(checksnId, RSAUtil.fontSeparator); + String oldId = oldchecksnId[0]; + if (oldId.equals(snId)) { + return new Response().set(1, true, "瀵嗙爜姝g‘"); } else { - return new Response<>().set(1, false, "娣诲姞澶辫触"); + return new Response().set(1, false, "瀵嗙爜涓嶆纭�"); + } + } + //閲嶇疆瀵嗙爜 + public Response resetSnId(int uid ) { + UpdateWrapper wrapper=new UpdateWrapper(); + wrapper.set("usnid",RSAUtil.encrypt("123456",RSAUtil.getPublicKey())); + wrapper.eq("uid",uid); + int flag=mapper.update(null,wrapper); + return new Response().set(1,flag>0,flag>0?"淇敼鎴愬姛":"淇敼澶辫触"); + + } + //鍒犻櫎鐢ㄦ埛淇℃伅 + @Transactional + public Response delUser(String uname) { + //鑾峰彇鐢ㄦ埛鐨剈id + User User=mapper.getUinfByUname(uname); + if(User==null){ + return new Response().set(1,false,"鐢ㄦ埛涓嶅瓨鍦�"); + }else { + int uid=User.getId(); + UpdateWrapper wrapper=new UpdateWrapper(); + wrapper.eq("uname",uname); + int bl=mapper.delete(wrapper); + if(bl>0){ + //鍒犻櫎鏉冮檺缁勪笅鐨勭敤鎴� + UpdateWrapper wrapper1=new UpdateWrapper(); + wrapper1.eq("uid",uid); + pergroupUserMapper.delete(wrapper1); + //鍒犻櫎鍖呮満缁勪笅鐨勭敤鎴� + UpdateWrapper wrapper2=new UpdateWrapper(); + wrapper2.eq("uid",uid); + bjgroupUsrMapper.delete(wrapper2); + } + return new Response().setII(1,bl>0,bl,"鍒犻櫎鎴愬姛"); } } - /*public Response registerUser(User user){ + public Response login(String uname, String usnId, Integer platFrom, HttpServletRequest request) { + Response response = new Response(); + String[] dataArr = RSAUtil.decryptFrontP(usnId, RSAUtil.fontSeparator); + //楠岀md5 + if(dataArr[0]==null||dataArr[1]==null){ + return response.set(1, false, "瀵嗙爜楠岀澶辫触"); + } + if (!dataArr[1].equals(MD5Util.encryptMD5(org.apache.commons.lang3.StringUtils.trim(dataArr[0])))) { + return response.set(1, false, "瀵嗙爜楠岀澶辫触"); + } + UsernamePasswordToken userToken = new UsernamePasswordToken(uname, dataArr[0]); + Subject subject = SecurityUtils.getSubject(); try { - User userFound = userBridgeService.findPasswordByUserName(user.getName()); - if (userFound.getId() != 0) { - return new Response<>().set(1, false, "鐢ㄦ埛鍚嶅凡瀛樺湪"); + subject.login(userToken); + } catch (Exception e) { + if(e instanceof UnknownAccountException){ + return response.set(1,false,"璐﹀彿涓嶅瓨鍦�"); } - User userOfMobilephone = userBridgeService.findUserByMobilephone(user.getPhoneNumber()); - if (userOfMobilephone.getId()!=0) { - return new Response<>().set(1, false, "鎵嬫満鍙峰凡瀛樺湪"); - } - //String password = URLDecoder.decode(user.getUpassword(), "utf-8"); - String password = user.getPwd(); + return response.set(1,false,"瀵嗙爜閿欒"); + } + //Session瀛樺偍褰撳墠鐢ㄦ埛鍙婃潈闄愮粍鍒楄〃 + User userDB = (User) subject.getPrincipal(); + userDB.setPwd(null); + //鐧诲綍鎴愬姛 + ServletContext servletContext = request.getServletContext(); + servletContext.setAttribute(uname, request.getSession().getId()); + request.getSession().setMaxInactiveInterval(60*30); + request.getSession().setAttribute("user", userDB); - String[] dataArr = RSAUtil.decryptFront(password, RSAUtil.fontSeparator); - String pwd = RSAUtil.encrypt(dataArr[0],RSAUtil.getPublicKey()); - user.setPwd(pwd); - int flag = userMapper.insert(user); - if (flag > 0) { - //娣诲姞鎴愬姛,鍒嗛厤鍒伴粯璁ゅ垵濮嬪寲鏉冮檺缁� - return new Response<>().set(1, true,"娉ㄥ唽鎴愬姛"); - } else { - return new Response<>().set(1, false, "娉ㄥ唽澶辫触"); + return response.setII(1,true, userDB,"鐧诲綍鎴愬姛"); + } + + public void logout() { + Subject subject = SecurityUtils.getSubject(); + subject.logout(); + } + //灏嗙敤鎴锋坊鍔犺嚦100~10000绠$悊鍛� + public Response improveRole(int uid) { + //鍒ゆ柇琛ㄦ槸鍚﹀瓨鍦� + String tableName = mapper.existTable(); + if(tableName==null){ + ///鍒涘缓100~1000鐨刬d琛�,涓嶅瓨鍦ㄥ垯鍒涘缓 + mapper.createNumber(); + //鎻掑叆榛樿鏁版嵁 + String sql=" INSERT INTO temp_numbers(unumber) " + + " VALUES "; + for(int i=101;i<=10000;i++){ + sql+="("+i+")"; + if(i!=10000){ + sql+=","; + } + } + mapper.setUnumber(sql); + } + String minUid=mapper.getIn10000(); + if(minUid==null){ + return new Response().set(1,false,"绠$悊鍛樹釜鏁拌秴杩囦笂闄�"); + } + UpdateWrapper wrapper =new UpdateWrapper(); + wrapper.set("uid",minUid); + wrapper.eq("uid",uid); + int flag= mapper.update(null,wrapper); + return new Response().set(1,flag>0,flag>0?"韬唤鍙樻洿鎴愬姛":"韬唤鍙樻洿澶辫触"); + } + //灏嗙鐞嗗憳鍙樻垚鏅�氱敤鎴� + public Response dropRole(int uid, HttpServletRequest request) { + //鏌ヨ鏈�澶х殑uid + String maxUid=mapper.getMaxUid(); + if(maxUid==null){ + maxUid="10001"; + } + //鏍规嵁鐢ㄦ埛id鏌ヨ鐢ㄦ埛淇℃伅 + QueryWrapper qWrapper=new QueryWrapper(); + qWrapper.eq("uid",uid); + qWrapper.last("limit 1"); + User uinf=mapper.selectOne(qWrapper); + //缂栬緫 + UpdateWrapper wrapper =new UpdateWrapper(); + wrapper.set("uid",Integer.valueOf(maxUid)+1); + wrapper.eq("uid",uid); + int flag= mapper.update(null,wrapper); + //濡傛灉鏄櫘閫氱敤鎴疯嚜宸卞己閫�锛屽皢鐢ㄦ埛鍚嶅搴旂殑sessionId鍙樻洿 + ServletContext servletContext = request.getServletContext(); + servletContext.setAttribute(uinf.getName(),"123456"); + return new Response().set(1,flag>0,flag>0?"韬唤鍙樻洿鎴愬姛":"韬唤鍙樻洿澶辫触"); + } + + public Response getUserNameList() { + QueryWrapper<User> query = Wrappers.query(); + query.select("uname"); + List<String> userNameList = mapper.selectList(query).stream().map(User::getName).collect(Collectors.toList()); + return new Response().set(1,userNameList); + } + + //鐧诲綍妫�娴� + public Response checkUserWebSocket(HttpSession httpSession){ + Response model = new Response(); + try { + User user = (User) httpSession.getAttribute("user"); + if(user!=null){ + String sessionId = (String) httpSession.getServletContext().getAttribute(user.getName()); + if(httpSession.getId().equals(sessionId)){ + model.set(1,user,null); + }else{ + if(sessionId.equals("123456")){ + model.set(1,false,"韬唤鏉冮檺鍙樻洿,璇烽噸鏂扮櫥褰�"); + }else{ + model.set(1,false,"涓嶅悓涓绘満鐧诲綍"); + } + //鐢ㄦ埛鍦ㄥ叾浠栦富鏈虹櫥褰�,寮鸿揩鐢ㄦ埛鍦ㄦ湰鏈虹殑session澶辨晥 + httpSession.invalidate(); + } + } + else { + model.set(1,false,"鐢ㄦ埛淇℃伅澶辨晥,璇烽噸鏂扮櫥褰�"); } }catch (Exception e){ - e.printStackTrace(); - return new Response<>().set(0); + model.set(1,false,"鐧诲綍淇℃伅澶辨晥,閲嶆柊鐧诲綍"); } - }*/ + return model; + } + //鏌ヨ鎵�鏈夌敤鎴蜂俊鎭�(涓嶅垎椤电敤浜庝笅鎷�) + public Response getUinf() { + QueryWrapper wrapper=new QueryWrapper(); + wrapper.select("uid","uname","urole"); + wrapper.gt("uid",100); + //wrapper.eq("urole",0);//鏅�氱敤鎴� + wrapper.orderByAsc("uid"); + List<User> list=mapper.selectList(wrapper); + return new Response().setII(1,list!=null,list,"鏌ヨ鎵�鏈夌敤鎴蜂俊鎭�(涓嶅垎椤电敤浜庝笅鎷�)"); + } + //鏍规嵁uId鑾峰彇璁惧淇℃伅 + public User getUinfByUId(int uId){ + QueryWrapper wrapper=new QueryWrapper(); + wrapper.eq("id",uId); + wrapper.last("limit 1"); + User uinf=mapper.selectOne(wrapper); + return uinf; + } + //缂栬緫鐢ㄦ埛淇℃伅 + @Transactional + public Response updateUinf(User uinf) { + UpdateWrapper wrapper=new UpdateWrapper(); + if(uinf.getPhoneNumber()!=null){ + wrapper.set("phone_number",uinf.getPhoneNumber()); + } + wrapper.eq("id",uinf.getId()); + mapper.update(null,wrapper); - public User getById(int id) { - User user = userMapper.selectById(id); - user.setPwd((String) CommonUtil.objectNull); - return user; + return new Response().set(1,true,"缂栬緫鐢ㄦ埛淇℃伅鎴愬姛"); + } + //鏍规嵁Ukey鏌ヨ鐢ㄦ埛 + public User getUserByUKeyId(String ukeyId){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.select("uid","uname","real_name","urole","create_time","phone_number","address","face_id","ukey_id"); + queryWrapper.eq("ukey_id",ukeyId); + queryWrapper.last("limit 1"); + User User = mapper.selectOne(queryWrapper); + return User; } - public List<User> getAll() { - List<User> users = userMapper.selectList((Wrapper<User>) CommonUtil.objectNull); - return users; + //鏍规嵁uname鏌ヨ鐢ㄦ埛 + public User getUserByUserName(String uname){ + QueryWrapper queryWrapper = new QueryWrapper(); + queryWrapper.select("uid","uname","real_name","urole","create_time","phone_number","address","face_id","ukey_id"); + queryWrapper.eq("uname",uname); + queryWrapper.last("limit 1"); + User User = mapper.selectOne(queryWrapper); + return User; } - - @Cacheable(value = "userPage") - public Response getPage(int pageNum,int pageSize) { - PageHelper.startPage(pageNum,pageSize); - List<User> list = userMapper.selectList((Wrapper<User>) CommonUtil.objectNull); - for (User user:list) { - user.setPwd((String) CommonUtil.objectNull); - } - PageInfo<User> pageInfo = new PageInfo<>(list); - return new Response().set(1,pageInfo,"鏌ヨ鎴愬姛"); - } - - @CacheEvict(value = "userPage",allEntries = true) - public Response update(User user) { - User userFound = userBridgeService.findPasswordByUserName(user.getName()); - User userOfPhoneNumber = userBridgeService.getUserByPhoneNumber(user.getPhoneNumber()); - if (userFound.getId() != 0 && !userFound.getId().equals(user.getId())) { - return new Response().set(1,false,"鐢ㄦ埛鍚嶉噸澶�"); - } - if( userOfPhoneNumber.getId()!=0 && !userFound.getId().equals(user.getId())){ - return new Response().set(1,false,"鎵嬫満鍙烽噸澶�"); - } - user.setPwd(null); - if(userMapper.updateById(user)>0){ - return new Response().set(1,true,"淇敼鎴愬姛"); - }else{ - return new Response().set(1,false,"淇敼澶辫触"); - } - - } - // 灏嗘墍鏈夌櫥闄嗙殑鐢ㄦ埛鐨勪俊鎭瓨鍒癮pplication涓� public void setApplication(User user) { - ServletContext application = CommonUtil.getApplication(); + ServletContext application = ActionUtil.getApplication(); //鏌ョ湅鍏ㄥ眬涓瓨鍌ㄧ殑users鐨凪ap鐨刱ey-value闆嗗悎 Map<String, UserClient> map = (Map) application.getAttribute("users"); - if (map == CommonUtil.objectNull) { + if (map == ActionUtil.objeNull) { map = new HashMap<String, UserClient>(); } else { //濡傛灉闆嗗悎涓湁鍊�,鍒欒幏鍙栧綋鍓嶇敤鎴峰搴旂殑鐢ㄦ埛淇℃伅,key涓虹敤鎴峰悕username,Value涓虹敤鎴峰悕,瀛樺偍鐨勬椂闂� UserClient client = map.get(user.getName()); - if (client != CommonUtil.objectNull) { //宸插瓨鍦� + if (client != ActionUtil.objeNull) { //宸插瓨鍦� map.remove(user.getName()); } } Long login_time = new Date().getTime(); - CommonUtil.getSession().setAttribute("login_time", login_time); - map.put(user.getName(), new UserClient(CommonUtil.getRequest().getRemoteAddr(),user,login_time)); + ActionUtil.getSession().setAttribute("login_time", login_time); + map.put(user.getName(), new UserClient(ActionUtil.getRequest().getRemoteAddr(),user,login_time)); application.setAttribute("users", map); } - public Response updatePasswordByRSA(User user, String newPwd){ - String[] dataArr = RSAUtil.decryptFrontP(newPwd, RSAUtil.fontSeparator); - newPwd = dataArr[0]; - String passwordMD5 = dataArr[1]; - if(!CommonUtil.EncryptionMD5(newPwd).equals(passwordMD5)){ - throw new InvalidParameterException("鍙傛暟鏍¢獙澶辫触"); - } - String pwd = RSAUtil.encrypt(newPwd,RSAUtil.getPublicKey()); - user.setPwd(pwd); - if (userMapper.updateById(user)>0){ - return new Response().set(1,true,"鏂板瘑鐮佷慨鏀规垚鍔�"); - }else { - return new Response().set(0,false,"鏂板瘑鐮佷慨鏀瑰け璐�"); - } - } public List<User> searchCS_All2() { - return userMapper.searchCS_All2(); + return mapper.searchCS_All2(); } } -- Gitblit v1.9.1