whyclxw
2025-05-28 e16302f9d475c7cc4dd18c5abf1a23cb5502e362
src/main/java/com/whyc/service/UserService.java
@@ -1,5 +1,6 @@
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;
@@ -8,9 +9,7 @@
import com.whyc.constant.UserConstant;
import com.whyc.constant.YamlProperties;
import com.whyc.dto.Response;
import com.whyc.mapper.BaoJiGroupUserMapper;
import com.whyc.mapper.UserMapper;
import com.whyc.mapper.UserPermitGroupDataMapper;
import com.whyc.mapper.*;
import com.whyc.pojo.*;
import com.whyc.util.ActionUtil;
import com.whyc.util.RSAUtil;
@@ -19,6 +18,7 @@
import org.springframework.context.ApplicationContext;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestParam;
import javax.annotation.Resource;
import javax.servlet.ServletContext;
@@ -43,6 +43,14 @@
    @Autowired
    private ApplicationContext applicationContext;
    @Resource
    private PermitGroupUserService permitGroupUserService;
    @Resource
    private PageParamMapper pageParamMapper;
    public Response add(UserInf user) {
        try {
@@ -78,6 +86,8 @@
        }
    }
    public Response addByRSA(UserInf user) {
        //首先校验当前用户所在的权限组,是否存在用户编辑权限 usr_edit_permit
        if (!checkUserPermit()) return new Response<>().set(1, false, "当前用户没有用户编辑权限");
        try {
            UserInf userFound = userBridgeService.findPasswordByUserName(user.getUName());
            if (userFound.getUId() != 0) {
@@ -87,16 +97,15 @@
            if (userOfMobilephone.getUId()!=0) {
                return new Response<>().set(1, false, "手机号已存在");
            }
            String password = "";
            try {
                password = URLDecoder.decode(user.getUpassword(), "utf-8");
            }catch (UnsupportedEncodingException e){
                e.printStackTrace();
            }
            //String password = URLDecoder.decode(user.getUpassword(), "utf-8");
            String password = user.getUpassword();
            String[] dataArr = RSAUtil.decryptFront(password, RSAUtil.fontSeparator);
            String pwd = RSAUtil.encrypt(dataArr[0],RSAUtil.getPublicKey());
            user.setUpassword(pwd);
            user.setUSnId(pwd);
            user.setPasswordUpdateTime(new Date());
            user.setCreateTime(new Date());
            user.setLastLoginTime(new Date());
            int flag = userMapper.insert(user);
            if (flag > 0) {
                //添加成功,分配到默认初始化权限组
@@ -115,6 +124,26 @@
        }
    }
    private boolean checkUserPermit() {
        //首先校验当前用户所在的权限组,是否存在用户编辑权限 usr_edit_permit
        Long uId = ActionUtil.getUser().getUId();
        List<String> itemList = permitGroupUserService.getItemList(uId);
        if (!itemList.contains("usr_edit_permit")){
            return false;
        }
        return true;
    }
    private boolean checkUserPermitWithQuery() {
        //首先校验当前用户所在的权限组,是否存在用户查询权限 usr_query_permit
        Long uId = ActionUtil.getUser().getUId();
        List<String> itemList = permitGroupUserService.getItemList(uId);
        if (!itemList.contains("usr_query_permit")){
            return false;
        }
        return true;
    }
    public Response registerUser(UserInf user){
        try {
            UserInf userFound = userBridgeService.findPasswordByUserName(user.getUName());
@@ -125,12 +154,9 @@
            if (userOfMobilephone.getUId()!=0) {
                return new Response<>().set(1, false, "手机号已存在");
            }
            String password = "";
            try {
                password = URLDecoder.decode(user.getUpassword(), "utf-8");
            }catch (UnsupportedEncodingException e){
                e.printStackTrace();
            }
            //String password = URLDecoder.decode(user.getUpassword(), "utf-8");
            String password = user.getUpassword();
            String[] dataArr = RSAUtil.decryptFront(password, RSAUtil.fontSeparator);
            String pwd = RSAUtil.encrypt(dataArr[0],RSAUtil.getPublicKey());
            user.setUpassword(pwd);
@@ -163,22 +189,32 @@
    }
    public List<UserInf> getAll() {
        List<UserInf> users = userMapper.selectList(null);
        List<UserInf> users = userMapper.selectList((Wrapper<UserInf>) ActionUtil.objeNull);
        return users;
    }
    public Response getAllWithPage(int pageNum,int pageSize) {
        //验证是否存在usr_query_permit权限
        if (!checkUserPermitWithQuery()) {
            return new Response<Boolean>().set(1, false, "当前用户没有查询权限");
        }
        PageHelper.startPage(pageNum,pageSize);
        List<UserInf> list = userMapper.getUserInfAndPermitInf();
        for (UserInf uinf:list) {
            uinf.setUSnId("*******");
            uinf.setUpassword("*******");
        }
        PageInfo<UserInf> pageInfo = new PageInfo<>(list);
        return new Response().set(1,pageInfo,"查询成功");
    }
    public Response update(UserInf user) {
        //首先校验当前用户所在的权限组,是否存在用户编辑权限 usr_edit_permit
        if (!checkUserPermit()) return new Response<>().set(1, false, "当前用户没有用户编辑权限");
        //非系统管理员用户,禁止修改访问ip和访问时间
        if(user.getUId()!=1 && user.getUName().equals("sys_admin")){
            user.setVisitIp(null);
            user.setVisitTime(null);
            user.setVisitIp((String) ActionUtil.objeNull);
            user.setVisitTime((String) ActionUtil.objeNull);
        }
        UserInf userFound = userBridgeService.findPasswordByUserName(user.getUName());
        UserInf userOfMobilephone = userBridgeService.findUserByMobilephone(user.getUMobilephone());
@@ -188,6 +224,8 @@
        if( userOfMobilephone.getUId()!=0 && !userFound.getUId().equals(user.getUId())){
            return new Response().set(1,false,"手机号重复");
        }
        user.setUpassword(null);
        user.setUSnId(null);
        if(userMapper.updateById(user)>0){
            return new Response().set(1,true,"修改成功");
        }else{
@@ -198,6 +236,8 @@
    @Transactional
    public boolean delete(int id) {
        //首先校验当前用户所在的权限组,是否存在用户编辑权限 usr_edit_permit
        if (!checkUserPermit()) return false;
        UpdateWrapper wrapper = new UpdateWrapper();
        wrapper.eq("uId", id);
        //删除对应的包机组记录
@@ -213,12 +253,12 @@
        ServletContext application = ActionUtil.getApplication();
        //查看全局中存储的users的Map的key-value集合
        Map<String, UserClient> map = (Map) application.getAttribute("users");
        if (map == null) {
        if (map == ActionUtil.objeNull) {
            map = new HashMap<String, UserClient>();
        } else {
            //如果集合中有值,则获取当前用户对应的用户信息,key为用户名username,Value为用户名,存储的时间
            UserClient client = map.get(user.getUName());
            if (client != null) { //已存在
            if (client != ActionUtil.objeNull) { //已存在
                map.remove(user.getUName());
            }
        }
@@ -231,6 +271,7 @@
    public UserInf getUserByUKeyId(String uKeyId){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("uKey_ID",uKeyId);
        queryWrapper.last("limit 1");
        UserInf userInf = userMapper.selectOne(queryWrapper);
        return userInf;
    }
@@ -238,14 +279,16 @@
    public UserInf getUserByUserName(String userName){
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("Uname",userName);
        queryWrapper.last("limit 1");
        UserInf userInf = userMapper.selectOne(queryWrapper);
        return userInf;
    }
    public boolean bindUkey(UserInf userInf){
        UpdateWrapper updateWrapper = new UpdateWrapper();
        updateWrapper.set("uKey_ID",userInf.getUkeyId());
        updateWrapper.eq("uName",userInf.getUName());
        int affectRows = userMapper.update(userInf,updateWrapper);
        int affectRows = userMapper.update((UserInf) ActionUtil.objeNull,updateWrapper);
        return affectRows>0;
    }
@@ -274,13 +317,50 @@
        if(!ActionUtil.EncryptionMD5(newPwd).equals(passwordMD5)){
            throw new InvalidParameterException("参数校验失败");
        }
        if(!ActionUtil.filterPwd(newPwd)){
            return new Response().set(0,false,"新密码验证不通过(最少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符)");
        }
        String pwd = RSAUtil.encrypt(newPwd,RSAUtil.getPublicKey());
        user.setUpassword(pwd);
        user.setUSnId(pwd);
        user.setPasswordUpdateTime(new Date());
        if (userMapper.updateById(user)>0){
            return new Response().set(1,"修改成功");
            return new Response().set(1,true,"新密码修改成功");
        }else {
            return new Response().set(0,"修改失败");
            return new Response().set(0,false,"新密码修改失败");
        }
    }
    //密码失效修改密码
    public Response updatePasswordByValidity(String uname, String oldPwd, String newPwd) throws UnsupportedEncodingException {
        //验证旧密码是否正确
        QueryWrapper<UserInf> queryWrapper = Wrappers.query();
        queryWrapper.select("uid","upassword").eq("uName",uname).last(" limit 1");
        UserInf user=userMapper.selectOne(queryWrapper);
        if(user==null){
            return new Response().set(0,false,"用户不存在");
        }
        String passwordDB =user.getUpassword();
        oldPwd = RSAUtil.decryptFront(oldPwd, RSAUtil.fontSeparator)[0];
        if(!RSAUtil.decrypt(passwordDB,RSAUtil.getPrivateKey()).equals(oldPwd)){
            return new Response().set(0,false,"旧密码输入错误");
        }
        String[] dataArr = RSAUtil.decryptFrontP(newPwd, RSAUtil.fontSeparator);
        newPwd = dataArr[0];
        String passwordMD5 = dataArr[1];
        if(!ActionUtil.filterPwd(newPwd)){
            return new Response().set(0,false,"新密码验证不通过(最少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符)");
        }
        if(!ActionUtil.EncryptionMD5(newPwd).equals(passwordMD5)){
            throw new InvalidParameterException("参数校验失败");
        }
        String pwd = RSAUtil.encrypt(newPwd,RSAUtil.getPublicKey());
        user.setUpassword(pwd);
        user.setUSnId(pwd);
        user.setPasswordUpdateTime(new Date());
        if (userMapper.updateById(user)>0){
            return new Response().set(1,true,"新密码修改成功");
        }else {
            return new Response().set(0,false,"新密码修改失败");
        }
    }
@@ -295,30 +375,30 @@
        }
        //更新新密码
        UpdateWrapper<UserInf> updateWrapper = Wrappers.update();
        updateWrapper.set("upassword",RSAUtil.encrypt(passwordNew,RSAUtil.getPublicKey())).eq("uName",userInf.getUName());
        userMapper.update(null,updateWrapper);
        updateWrapper.set("upassword",RSAUtil.encrypt(passwordNew,RSAUtil.getPublicKey())).set("password_update_time",new Date()).eq("uName",userInf.getUName());
        userMapper.update((UserInf) ActionUtil.objeNull,updateWrapper);
        return new Response().set(1,true,"密码修改成功");
    }
    /**锁定账号*/
    public void lock(Long uId) {
        UpdateWrapper<UserInf> wrapper = Wrappers.update();
        wrapper.set("status", UserConstant.ACCOUNT_STATUS_LOCK_FAIL.getValue()).eq("uId",uId);
        userMapper.update(null,wrapper);
        wrapper.set("status", UserConstant.ACCOUNT_STATUS_LOCK_FAIL.getValue()).set("lock_time",new Date()).eq("uId",uId);
        userMapper.update((UserInf) ActionUtil.objeNull,wrapper);
    }
    /**更新登录时间*/
    public void updateLoginTime(Long uId) {
        UpdateWrapper<UserInf> wrapper = Wrappers.update();
        wrapper.set("last_login_time", new Date()).eq("uId",uId);
        userMapper.update(null,wrapper);
        userMapper.update((UserInf) ActionUtil.objeNull,wrapper);
    }
    public void updateExpiredAccount() {
        UpdateWrapper<UserInf> wrapper = Wrappers.update();
        wrapper.set("status",UserConstant.ACCOUNT_STATUS_CANCEL.getValue()).eq("type",UserConstant.ACCOUNT_TYPE_TEMP.getValue()).gt("expiration_time",new Date());
        userMapper.update(null,wrapper);
        userMapper.update((UserInf) ActionUtil.objeNull,wrapper);
    }
    public void unLock() {
@@ -326,7 +406,7 @@
        wrapper.set("status", UserConstant.ACCOUNT_STATUS_ACTIVE.getValue()).set("lock_time",null)
                .eq("status",UserConstant.ACCOUNT_STATUS_LOCK_FAIL.getValue())
                .last(" and date_add(lock_time,interval 20 MINUTE)<now() and uId is not null");
        userMapper.update(null,wrapper);
        userMapper.update((UserInf) ActionUtil.objeNull,wrapper);
    }
    public void updateAccountStatus(int status) {
@@ -334,18 +414,18 @@
        wrapper.set("status", status)
                .eq("status",UserConstant.ACCOUNT_STATUS_ACTIVE.getValue())
                .last(" and date_add(last_login_time,interval 3 MONTH)<now() and uId >100");
        userMapper.update(null,wrapper);
        userMapper.update((UserInf) ActionUtil.objeNull,wrapper);
    }
    public void unLock(int uId, int unLockType) {
        UpdateWrapper<UserInf> wrapper = Wrappers.update();
        wrapper.set("status",1).eq("uId",uId);
        if(unLockType==1){
            wrapper.set("lock_time",null);
            wrapper.set("lock_time",ActionUtil.objeNull);
        }else{
            wrapper.set("last_login_time",new Date());
        }
        userMapper.update(null,wrapper);
        userMapper.update((UserInf) ActionUtil.objeNull,wrapper);
    }
    public List<UserInf> searchCS_All2() {
@@ -366,7 +446,7 @@
        query.select("uId","uName","uSnId","upassword","unote","UKey_ID","uRole","password_update_time","status","visit_time","visit_ip")
                .eq("uId",uId).last(" limit 1");
        UserInf userInf = userMapper.selectOne(query);
        if(userInf == null){
        if(userInf == ActionUtil.objeNull){
            response.setMsg("对应的用户不存在");
        }else{
            //判断用户状态
@@ -440,7 +520,7 @@
                session.setAttribute("ip",ActionUtil.getRequest().getRemoteAddr());
                List<UserPermitGroup> permitGroupList = permitMapper.getPermitGroupListByUId(uId);
                if(permitGroupList!=null && permitGroupList.size()>0){
                if(permitGroupList!=ActionUtil.objeNull && permitGroupList.size()>0){
                    session.setAttribute("permits", ActionUtil.tojson(permitGroupList));
                }else{
                    response.setMsg("还未分配权限");
@@ -458,4 +538,25 @@
        }
        return response;
    }
    public void updatePasswordsTo3072(List<UserInf> userListWithNewPwd) {
        userMapper.updatePasswordsTo3072(userListWithNewPwd);
    }
    //验证密码的时效性
    public int checkPasswordValidity(UserInf uinf) {
        int flag=1;
        //获取系统设置的密码时效(57,15)
        QueryWrapper wrapper=new QueryWrapper();
        wrapper.eq("categoryId",15);
        wrapper.eq("id",57);
        wrapper.last("limit 1");
        PageParam pageParam=pageParamMapper.selectOne(wrapper);
        if(pageParam!=null){
            int dayDifference=ActionUtil.daysBetween(uinf.getPasswordUpdateTime(),new Date());
            if((pageParam.getStatus()>0)&&(dayDifference>pageParam.getStatus())){
                    flag= -1;
            }
        }
        return flag;
    }
}