Quellcode durchsuchen

2023-2-7 修改加密卡号相关功能模块。

chaiyunlong vor 2 Jahren
Ursprung
Commit
905c6f68bf

+ 12 - 6
zd-auth/src/main/java/com/zd/auth/controller/TokenController.java

@@ -8,6 +8,7 @@ import com.zd.chemical.api.fegin.RemoteStockService;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.redis.RedisService;
 import com.zd.common.core.security.TokenService;
+import com.zd.common.core.utils.DESUtils;
 import com.zd.common.core.utils.IdUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.model.constant.*;
@@ -208,6 +209,10 @@ public class TokenController {
         logger.error("学习机登录,加密前:" + username + ",设备编码:" + machineCode);
         if (UserConstants.USER_LOGIN_HXP == aioType) {
             // TODO 终端传参数据有问题,暂临时后端处理
+            long num = Long.parseLong(username,16);
+            //通过des生成对称加密卡号
+            username = DESUtils.encrypt(num+"");
+
 //            username = username.replaceAll("%00", "")
 //                    .replaceAll("%02", "")
 //                    .replaceAll("%03", "")
@@ -216,13 +221,14 @@ public class TokenController {
 //                    .trim();
         } else {
             // 查询用户信息
-            if (StringUtils.isNumeric(username)) {
-                username = Long.toHexString(Long.parseLong(username)).toUpperCase();
+//            if (StringUtils.isNumeric(username)) {
+//                username = Long.toHexString(Long.parseLong(username)).toUpperCase();
+                username =DESUtils.encrypt(username+"");
                 logger.error("学习机登录,加密后:" + username);
-            } else {
-                logger.error("通过卡号未找到用户");
-                return R.fail("无效卡号或未绑定用户,请联系管理员!");
-            }
+//            } else {
+//                logger.error("通过卡号未找到用户");
+//                return R.fail("无效卡号或未绑定用户,请联系管理员!");
+//            }
         }
         R<SysUser> user = remoteUserService.getUserInfoByCardNum(username, SecurityConstants.INNER);
         if (R.FAIL == user.getCode()) {

+ 40 - 0
zd-common/common-core/src/main/java/com/zd/common/core/utils/DESUtils.java

@@ -3,6 +3,7 @@ package com.zd.common.core.utils;
 import javax.crypto.Cipher;
 import javax.crypto.SecretKey;
 import javax.crypto.spec.SecretKeySpec;
+import java.util.Random;
 
 /**
  * <p>DES可逆加密</p>
@@ -112,5 +113,44 @@ public class DESUtils {
         System.out.println("加密内容="+key);
         String res = DESUtils.decrypt(key);
         System.out.println("解密内容="+res);
+        //随机生成八位字符串
+        getRandomNum();
+    }
+
+
+    public static String getRandomNum() {
+        String randomNum = getRandomPassword(8);
+        System.out.println(randomNum);
+        return randomNum;
+    }
+
+
+    /**
+     * 返回随机产生的8位数
+     */
+    public static String getRandomPassword(int len) {
+        String result = makeRandomPassword(len);
+        if (result.matches(".*[a-z]{1,}.*") && result.matches(".*[A-Z]{1,}.*") && result.matches(".*\\d{1,}.*") &&
+                result.matches(".*[~!@#$%^&*\\.?]{1,}.*")) {
+            return result;
+        }
+        result = makeRandomPassword(len);
+        return result;
+    }
+
+    /**
+     * 产生8位随机数
+     *
+     * @param len 长度
+     * @return
+     */
+    public static String makeRandomPassword(int len) {
+        char charr[] = "1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890".toCharArray();
+        StringBuilder sb = new StringBuilder();
+        Random r = new Random();
+        for (int x = 0; x < len; ++x) {
+            sb.append(charr[r.nextInt(charr.length)]);
+        }
+        return sb.toString();
     }
 }

+ 14 - 1
zd-model/src/main/java/com/zd/model/entity/SysUser.java

@@ -189,11 +189,16 @@ public class SysUser extends BaseEntity implements Serializable {
     private String nature;
 
     /**
-     * 卡号
+     * 卡号8位简写
      */
     private String cardNum;
 
     /**
+     * 卡号des加密
+     */
+    private String cardNumSimple;
+
+    /**
      * 微信ID
      */
     private String wechatId;
@@ -711,4 +716,12 @@ public class SysUser extends BaseEntity implements Serializable {
     public void setDeptIds(List<Long> deptIds) {
         this.deptIds = deptIds;
     }
+
+    public String getCardNumSimple() {
+        return cardNumSimple;
+    }
+
+    public void setCardNumSimple(String cardNumSimple) {
+        this.cardNumSimple = cardNumSimple;
+    }
 }

+ 11 - 7
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/onemachine/controller/OneMachineController.java

@@ -312,19 +312,23 @@ public class OneMachineController extends BaseController {
      * @return
      */
     private R<SysUser> getSysUserR(@PathVariable("username") String username) {
-        //查询卡号转换到16位后去数据库查询
-        if(StringUtils.isNumeric(username)) {
-            Long carNum10 = Long.parseLong(username);
-            String carNum16 = Long.toHexString(carNum10).toUpperCase();
-            username = carNum16;
-        }
+//        //查询卡号转换到16位后去数据库查询
+//        if(StringUtils.isNumeric(username)) {
+//            Long carNum10 = Long.parseLong(username);
+//            String carNum16 = Long.toHexString(carNum10).toUpperCase();
+//            username = carNum16;
+//        }
+        //通过des生成对称加密卡号
+        String desCardNum = DESUtils.encrypt(username);
+        username = desCardNum;
+
         // 查询用户信息
         R<SysUser> userResult = userService.getUserInfoByCardNum(username, SecurityConstants.INNER);
         if (HttpStatus.ERROR == userResult.getCode()) {
             throw new ServiceException(userResult.getMsg());
         }
         if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) {
-            throw new ServiceException("用户:" + username + " 不存在");
+            throw new ServiceException("用户卡号:" + username + " 不存在");
         }
         return userResult;
     }

+ 13 - 12
zd-modules/zd-modules-laboratory/src/main/java/com/zd/laboratory/service/impl/HaiKangDoorService.java

@@ -7,10 +7,7 @@ import cn.hutool.json.JSONUtil;
 import com.zd.common.core.exception.NoRollException;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.security.TokenService;
-import com.zd.common.core.utils.DateUtils;
-import com.zd.common.core.utils.FileConfigUtils;
-import com.zd.common.core.utils.IdUtils;
-import com.zd.common.core.utils.SaveUtil;
+import com.zd.common.core.utils.*;
 import com.zd.common.core.utils.file.ImageUtils;
 import com.zd.laboratory.api.entity.LabMessageContent;
 import com.zd.laboratory.domain.*;
@@ -539,15 +536,19 @@ public class HaiKangDoorService {
                 continue;
             } else {
                 for (LabHaikangUser haikangUser : v) {
-                    haikangUser.setCardNo(user.getCardNum());
+                    haikangUser.setCardNo(user.getCardNumSimple());
                     if (StringUtils.isNotBlank(haikangUser.getCardNo())) {
-                        if(haikangUser.getCardNo().length() == 7){
-                            haikangUser.setCardNo("0" + haikangUser.getCardNo());
-                        }
-                        String cardNo = Long.parseLong(haikangUser.getCardNo(),16) + "";
-                        if(cardNo.length() == 9){
-                            cardNo = "0" + cardNo;
-                        }
+                        //由于卡号现在统一加密变了,顾原来的16进制不用了,改成现在的这种des加密解密
+                        haikangUser.setCardNo(DESUtils.decrypt(haikangUser.getCardNo()));
+                        String cardNo = haikangUser.getCardNo();
+//                        if(haikangUser.getCardNo().length() == 7){
+//                            haikangUser.setCardNo("0" + haikangUser.getCardNo());
+//                        }
+//                        String cardNo = Long.parseLong(haikangUser.getCardNo(),16) + "";
+//                        if(cardNo.length() == 9){
+//                            cardNo = "0" + cardNo;
+//                        }
+
 
                         try {
                             HaikangResult haikangResult = CardManage.deleteCardInfo(haikangUser.getJobNo());

+ 11 - 7
zd-modules/zd-modules-system/src/main/java/com/zd/system/controller/SysStudentController.java

@@ -5,6 +5,7 @@ import com.zd.common.core.annotation.Log;
 import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.log.BusinessType;
 import com.zd.common.core.redis.RedisService;
+import com.zd.common.core.utils.DESUtils;
 import com.zd.common.core.utils.ExcelUtil;
 import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.core.utils.StringUtils;
@@ -183,12 +184,14 @@ public class SysStudentController extends BaseController {
         ajax.put("posts", postService.selectPostAll(new SysPost()));
         if (StringUtils.isNotNull(userId)) {
             SysUser sysUser = sysStudentService.selectUserById(userId);
-            if(StringUtils.isNotNull(sysUser.getCardNum())){
+            if(StringUtils.isNotNull(sysUser.getCardNumSimple())){
                 try{
-                    long num = Long.parseLong(sysUser.getCardNum(),16);
-                    sysUser.setCardNum(num+"");
+//                    long num = Long.parseLong(sysUser.getCardNum(),16);
+//                    sysUser.setCardNum(num+"");
+                    String num = DESUtils.decrypt(sysUser.getCardNumSimple());
+                    sysUser.setCardNum(num);
                 }catch (Exception e){
-                    logger.info("卡号解密失败===="+sysUser.getCardNum());
+                    logger.info("卡号解密失败===="+sysUser.getCardNumSimple());
                 }
             }
             ajax.put(AjaxResult.DATA_TAG, sysUser);
@@ -239,9 +242,10 @@ public class SysStudentController extends BaseController {
             return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
         }
         if(StringUtils.isNotEmpty(user.getCardNum())){
-            Long carNum10 = Long.parseLong(user.getCardNum());
-            String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-            SysUser sysUser= userService.selectUserInfoByCardNum(carNum16);
+//            Long carNum10 = Long.parseLong(user.getCardNum());
+//            String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+            String num = DESUtils.decrypt(user.getCardNumSimple());
+            SysUser sysUser= userService.selectUserInfoByCardNum(num);
             if(null!=sysUser && user.getUserId().intValue()!=sysUser.getUserId().intValue()){
                 return AjaxResult.error(user.getCardNum()+"已与"+sysUser.getNickName()+"绑定,无法提交");
             }

+ 7 - 4
zd-modules/zd-modules-system/src/main/java/com/zd/system/controller/SysTeacherController.java

@@ -4,6 +4,7 @@ import com.zd.common.core.annotation.Log;
 import com.zd.common.core.annotation.PreAuthorize;
 import com.zd.common.core.log.BusinessType;
 import com.zd.common.core.redis.RedisService;
+import com.zd.common.core.utils.DESUtils;
 import com.zd.common.core.utils.ExcelUtil;
 import com.zd.common.core.web.controller.BaseController;
 import com.zd.model.constant.BaseConstants;
@@ -287,12 +288,14 @@ public class SysTeacherController extends BaseController {
         if (StringUtils.isNotNull(userId)) {
             SysUser sysUser = sysTeacherService.selectUserById(userId);
             if(StringUtils.isNotNull(sysUser)){
-                if(StringUtils.isNotEmpty(sysUser.getCardNum())){
+                if(StringUtils.isNotEmpty(sysUser.getCardNumSimple())){
                     try{
-                        long num = Long.parseLong(sysUser.getCardNum(),16);
-                        sysUser.setCardNum(num+"");
+//                        long num = Long.parseLong(sysUser.getCardNum(),16);
+//                        sysUser.setCardNum(num+"");
+                        String num = DESUtils.decrypt(sysUser.getCardNumSimple());
+                        sysUser.setCardNum(num);
                     }catch (Exception e){
-                        logger.info("卡号解密失败===="+sysUser.getCardNum());
+                        logger.info("卡号解密失败===="+sysUser.getCardNumSimple());
                     }
                 }
             }

+ 10 - 2
zd-modules/zd-modules-system/src/main/java/com/zd/system/mapper/SysUserMapper.java

@@ -72,10 +72,10 @@ public interface SysUserMapper {
     /**
      * 通过用户卡号查询用户
      *
-     * @param cardNum 卡号
+     * @param cardNumSimple 真实卡号
      * @return 用户对象信息
      */
-    public SysUser selectUserByCardNum(String cardNum);
+    public SysUser selectUserByCardNum(String cardNumSimple);
 
 
     /**
@@ -201,6 +201,14 @@ public interface SysUserMapper {
     public int checkCardUnique(SysUser user);
 
     /**
+     * 校验卡号是否唯一
+     *
+     * @param user 用户实体对象
+     * @return 结果
+     */
+    public int checkCardSimpleUnique(SysUser user);
+
+    /**
      * 校验手机号码是否唯一
      *
      * @param phonenumber 手机号码

+ 50 - 37
zd-modules/zd-modules-system/src/main/java/com/zd/system/service/impl/SysStudentServiceImpl.java

@@ -5,6 +5,7 @@ import com.zd.common.core.annotation.DataScope;
 import com.zd.common.core.exception.NoRollException;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.security.TokenService;
+import com.zd.common.core.utils.DESUtils;
 import com.zd.common.core.utils.DictUtils;
 import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.core.utils.StringUtils;
@@ -72,6 +73,9 @@ public class SysStudentServiceImpl implements ISysStudentService {
     private ISysPermitMenuService sysPermitMenuService;
     @Autowired
     private RemoteMessageContentService remoteMessageContentService;
+    @Autowired
+    private SysTeacherServiceImpl sysTeacherService;
+
 
 
     /**
@@ -303,19 +307,21 @@ public class SysStudentServiceImpl implements ISysStudentService {
     @Override
     @Transactional
     public int insertUser(SysUser user) {
-        //将10进制卡号转换至16进制
-        if(StringUtils.isNotEmpty(user.getCardNum())){
-            if(StringUtils.isNumeric(user.getCardNum())){
-                Long carNum10 = Long.parseLong(user.getCardNum());
-                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-                user.setCardNum(carNum16);
-            }else{
-                throw new ServiceException("卡号只能是数字,不能包含字母!");
-            }
-
-        }else{
-            user.setCardNum(null);
-        }
+//        //将10进制卡号转换至16进制
+//        if(StringUtils.isNotEmpty(user.getCardNum())){
+//            if(StringUtils.isNumeric(user.getCardNum())){
+//                Long carNum10 = Long.parseLong(user.getCardNum());
+//                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+//                user.setCardNum(carNum16);
+//            }else{
+//                throw new ServiceException("卡号只能是数字,不能包含字母!");
+//            }
+//
+//        }else{
+//            user.setCardNum(null);
+//        }
+        //处理卡号加密
+        sysTeacherService.passCardNum(user,1);
 
         // 新增用户信息
         int rows = userMapper.insertUser(user);
@@ -369,13 +375,15 @@ public class SysStudentServiceImpl implements ISysStudentService {
         try {
             //将10进制卡号转换至16进制
             if(StringUtils.isNotEmpty(user.getCardNum())){
-                if(StringUtils.isNumeric(user.getCardNum())){
-                    Long carNum10 = Long.parseLong(user.getCardNum());
-                    String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-                    user.setCardNum(carNum16);
-                }else{
-                    throw new ServiceException("卡号只能是数字,不能包含字母!");
-                }
+                //处理卡号加密
+                sysTeacherService.passCardNum(user,0);
+//                if(StringUtils.isNumeric(user.getCardNum())){
+//                    Long carNum10 = Long.parseLong(user.getCardNum());
+//                    String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+//                    user.setCardNum(carNum16);
+//                }else{
+//                    throw new ServiceException("卡号只能是数字,不能包含字母!");
+//                }
             }else{
                 user.setCardNum(null);
             }
@@ -394,18 +402,21 @@ public class SysStudentServiceImpl implements ISysStudentService {
     @Override
     @Transactional(noRollbackFor = {NoRollException.class})
     public int update(SysUser user) {
-        //将10进制卡号转换至16进制
-        if(StringUtils.isNotEmpty(user.getCardNum())){
-            if(StringUtils.isNumeric(user.getCardNum())){
-                Long carNum10 = Long.parseLong(user.getCardNum());
-                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-                user.setCardNum(carNum16);
-            }else{
-                throw new ServiceException("卡号只能是数字,不能包含字母!");
-            }
-        }else{
-            user.setCardNum(null);
-        }
+//        //将10进制卡号转换至16进制
+//        if(StringUtils.isNotEmpty(user.getCardNum())){
+//            if(StringUtils.isNumeric(user.getCardNum())){
+//                Long carNum10 = Long.parseLong(user.getCardNum());
+//                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+//                user.setCardNum(carNum16);
+//            }else{
+//                throw new ServiceException("卡号只能是数字,不能包含字母!");
+//            }
+//        }else{
+//            user.setCardNum(null);
+//        }
+
+        //处理卡号加密
+        sysTeacherService.passCardNum(user,0);
         //处理Object 转换实体类
         List <Object> permitMenus = user.getPermitMenus();
         List<SysPermitMenu> newPermitMenus = new ArrayList<>();
@@ -417,10 +428,11 @@ public class SysStudentServiceImpl implements ISysStudentService {
             // 插入最新用户绑定的权限数据
             sysPermitMenuService.insertSysPermitMenuList(null,user.getUserId(),newPermitMenus);
         }
-        int count = userMapper.updateStudentUser(user);
 
         SysUser oldUser = userMapper.selectUserById(user.getUserId());
-        if(StringUtils.isNotEmpty(user.getCardNum()) && oldUser != null && !oldUser.getCardNum().equals(user.getCardNum())){
+
+        int count = userMapper.updateStudentUser(user);
+        if(StringUtils.isNotEmpty(user.getCardNumSimple()) && oldUser != null && !oldUser.getCardNumSimple().equals(user.getCardNumSimple())){
             remoteMessageContentService.updateUserCard(user);
         }
 
@@ -960,9 +972,10 @@ public class SysStudentServiceImpl implements ISysStudentService {
         }
 
         if(StringUtils.isNotEmpty(user.getCardNum())){
-            Long carNum10 = Long.parseLong(user.getCardNum());
-            String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-            SysUser sysUser = userMapper.selectUserByCardNum(carNum16);
+//            Long carNum10 = Long.parseLong(user.getCardNum());
+//            String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+            String desCardNum = DESUtils.encrypt(user.getCardNum());
+            SysUser sysUser = userMapper.selectUserByCardNum(desCardNum);
             if(StringUtils.isNotNull(sysUser)){
                 if(checkBox){
                     user.getFailRemark().append("失败:");

+ 99 - 47
zd-modules/zd-modules-system/src/main/java/com/zd/system/service/impl/SysTeacherServiceImpl.java

@@ -5,6 +5,7 @@ import com.zd.common.core.annotation.DataScope;
 import com.zd.common.core.exception.NoRollException;
 import com.zd.common.core.exception.ServiceException;
 import com.zd.common.core.security.TokenService;
+import com.zd.common.core.utils.DESUtils;
 import com.zd.common.core.utils.SecurityUtils;
 import com.zd.common.core.utils.StringUtils;
 import com.zd.laboratory.api.feign.RemoteMessageContentService;
@@ -284,20 +285,23 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int insertUser(SysUser user) {
-        //将10进制卡号转换至16进制
-        if(StringUtils.isNotEmpty(user.getCardNum())){
-            if(StringUtils.isNumeric(user.getCardNum())){
-                Long carNum10 = Long.parseLong(user.getCardNum());
-                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-                user.setCardNum(carNum16);
-            }else{
-                throw new ServiceException("卡号只能是数字,不能包含字母!");
-            }
-
-        }else{
-            user.setCardNum(null);
-        }
-
+//        //将10进制卡号转换至16进制
+//        if(StringUtils.isNotEmpty(user.getCardNum())){
+//            if(StringUtils.isNumeric(user.getCardNum())){
+//                Long carNum10 = Long.parseLong(user.getCardNum());
+//                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+//                user.setCardNum(carNum16);
+//            }else{
+//                throw new ServiceException("卡号只能是数字,不能包含字母!");
+//            }
+//
+//        }else{
+//            user.setCardNum(null);
+//        }
+
+
+        //处理卡号加密
+        passCardNum(user,1);
         // 新增用户信息
         int rows = userMapper.insertUser(user);
         //处理Object 转换实体类
@@ -350,13 +354,15 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
         try {
             //将10进制卡号转换至16进制
             if(StringUtils.isNotEmpty(user.getCardNum())){
-                if(StringUtils.isNumeric(user.getCardNum())){
-                    Long carNum10 = Long.parseLong(user.getCardNum());
-                    String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-                    user.setCardNum(carNum16);
-                }else{
-                    throw new ServiceException("卡号只能是数字,不能包含字母!");
-                }
+                //处理卡号加密
+                passCardNum(user,0);
+//                if(StringUtils.isNumeric(user.getCardNum())){
+//                    Long carNum10 = Long.parseLong(user.getCardNum());
+//                    String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+//                    user.setCardNum(carNum16);
+//                }else{
+//                    throw new ServiceException("卡号只能是数字,不能包含字母!");
+//                }
             }else{
                 user.setCardNum(null);
             }
@@ -375,18 +381,20 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
     @Override
     @Transactional(noRollbackFor = {NoRollException.class})
     public int update(SysUser user) {
-        //将10进制卡号转换至16进制
-        if(StringUtils.isNotEmpty(user.getCardNum())){
-            if(StringUtils.isNumeric(user.getCardNum())){
-                Long carNum10 = Long.parseLong(user.getCardNum());
-                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-                user.setCardNum(carNum16);
-            }else{
-                throw new ServiceException("卡号只能是数字,不能包含字母!");
-            }
-        }else{
-            user.setCardNum(null);
-        }
+//        //将10进制卡号转换至16进制
+//        if(StringUtils.isNotEmpty(user.getCardNum())){
+//            if(StringUtils.isNumeric(user.getCardNum())){
+//                Long carNum10 = Long.parseLong(user.getCardNum());
+//                String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+//                user.setCardNum(carNum16);
+//            }else{
+//                throw new ServiceException("卡号只能是数字,不能包含字母!");
+//            }
+//        }else{
+//            user.setCardNum(null);
+//        }
+        //处理卡号加密
+        passCardNum(user,0);
         //处理Object 转换实体类
         List <Object> permitMenus = user.getPermitMenus();
         List<SysPermitMenu> newPermitMenus = new ArrayList<>();
@@ -398,14 +406,15 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
             // 插入最新用户绑定的权限数据
             sysPermitMenuService.insertSysPermitMenuList(null,user.getUserId(),newPermitMenus);
         }
-        if (userMapper.checkCardUnique(user)>0) {
+        if (userMapper.checkCardSimpleUnique(user)>0) {
             throw new ServiceException("卡号重复,请重新录入!");
         }
 
+        SysUser oldUser = userMapper.selectUserById(user.getUserId());
+
         int count = userMapper.updateUser(user);
 
-        SysUser oldUser = userMapper.selectUserById(user.getUserId());
-        if(StringUtils.isNotEmpty(user.getCardNum()) && oldUser != null && !oldUser.getCardNum().equals(user.getCardNum())){
+        if(StringUtils.isNotEmpty(user.getCardNumSimple()) && oldUser != null && !oldUser.getCardNumSimple().equals(user.getCardNumSimple())){
             user.setPermitMenus(null);
             remoteMessageContentService.updateUserCard(user);
         }
@@ -751,19 +760,20 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
             user.getFailRemark().append("身份不能为空、");
         }
 
-        if(StringUtils.isNotEmpty(user.getCardNum()) && !StringUtils.isNumeric(user.getCardNum())){
-            if(checkBox){
-                user.getFailRemark().append("失败:");
-                failSysUserList.add(user);
-                checkBox = false;
-            }
-            user.getFailRemark().append("卡号只能为数字、");
-        }
+//        if(StringUtils.isNotEmpty(user.getCardNum()) && !StringUtils.isNumeric(user.getCardNum())){
+//            if(checkBox){
+//                user.getFailRemark().append("失败:");
+//                failSysUserList.add(user);
+//                checkBox = false;
+//            }
+//            user.getFailRemark().append("卡号只能为数字、");
+//        }
 
         if(StringUtils.isNotEmpty(user.getCardNum())){
-            Long carNum10 = Long.parseLong(user.getCardNum());
-            String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
-            SysUser sysUser = userMapper.selectUserByCardNum(carNum16);
+//            Long carNum10 = Long.parseLong(user.getCardNum());
+//            String carNum16 = carNum10.toHexString(carNum10).toUpperCase();
+            String desCardNum = DESUtils.encrypt(user.getCardNum());
+            SysUser sysUser = userMapper.selectUserByCardNum(desCardNum);
             if(StringUtils.isNotNull(sysUser)){
                 if(checkBox){
                     user.getFailRemark().append("失败:");
@@ -1192,4 +1202,46 @@ public class SysTeacherServiceImpl implements ISysTeacherService {
         }
         return 1;
     }
+
+
+    /**
+     * 处理卡号加密
+     *
+     * @param user 用户信息,type 1需要生成八位加密编号,0不需要
+     * @return 结果
+     */
+    public void passCardNum(SysUser user,int type){
+        if(StringUtils.isNotEmpty(user.getCardNum())){
+            //通过des生成对称加密卡号
+            String desCardNum = DESUtils.encrypt(user.getCardNum());
+            user.setCardNumSimple(desCardNum);
+            //随机生成八位加密卡号
+            if(type==1){
+                checkCardNum(user);
+
+            }else{
+                SysUser newUser = selectUserById(user.getUserId());
+                if(StringUtils.isNotEmpty(newUser.getCardNum())){
+                    user.setCardNum(newUser.getCardNum());
+                }else{
+                    checkCardNum(user);
+                }
+            }
+        }else{
+            user.setCardNum(null);
+            user.setCardNumSimple(null);
+        }
+    }
+
+    private void checkCardNum(SysUser user){
+        user.setCardNum(DESUtils.getRandomNum());
+        //用死循环来校验卡号重复后,重新生成
+        while(true){
+            if (userMapper.checkCardUnique(user)>0) {
+                user.setCardNum(DESUtils.getRandomNum());
+            }else{
+                break;
+            }
+        }
+    }
 }

+ 14 - 4
zd-modules/zd-modules-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -34,6 +34,7 @@
         <result property="deptName" column="dept_name"/>
         <result property="tutorUserName" column="tutorUserName"/>
         <result property="cardNum" column="card_num"/>
+        <result property="cardNumSimple" column="card_num_simple"/>
         <result property="wechatId" column="wechat_id"/>
         <result property="education" column="education"/>
         <result property="nationality" column="nationality"/>
@@ -89,7 +90,7 @@
         select u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.user_type,
                d.dept_id, d.parent_id, d.dept_name, d.order_num, d.leader, d.status as dept_status,
                sm.`major_name` major, u.grade, u.category, u.tutor_user_id, u.position, u.nature, u.signature,
-               u.card_num,u.wechat_id,u.education,u.nationality,u.addr,u.work_status,u.date_birth,
+               u.card_num,u.card_num_simple,u.wechat_id,u.education,u.nationality,u.addr,u.work_status,u.date_birth,
                ut.nick_name tutorUserName,u.is_check,
                uf.face_img,sc.class_name,u.major_id,u.signature,pt.`post_name` positionName
         from sys_user u
@@ -322,7 +323,7 @@
 
     <select id="selectUserByCardNum" parameterType="String" resultMap="SysUserResult">
         <include refid="selectUserNewVo"/>
-        where u.card_num = #{cardNum} and u.del_flag = 0
+        where u.card_num_simple = #{cardNumSimple} and u.del_flag = 0
     </select>
 
     <select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
@@ -342,6 +343,10 @@
 		select count(1) from sys_user where card_num = #{cardNum} and del_flag=0 limit 1
 	</select>
 
+    <select id="checkCardSimpleUnique" parameterType="com.zd.model.entity.SysUser" resultType="int">
+		select count(1) from sys_user where card_num_simple = #{cardNumSimple} and del_flag=0 limit 1
+	</select>
+
     <select id="checkPhoneUnique" parameterType="String" resultMap="SysUserResult">
 		select user_id, phonenumber from sys_user where phonenumber = #{phonenumber} limit 1
 	</select>
@@ -463,6 +468,7 @@
         <if test="department != null and department != ''">department,</if>
         <if test="nature != null and nature != ''">nature,</if>
         <if test="cardNum != null and cardNum != ''">card_num,</if>
+        <if test="cardNumSimple != null and cardNumSimple != ''">card_num_simple,</if>
         <if test="education != null and education != ''">education,</if>
         <if test="nationality != null and nationality != ''">nationality,</if>
         <if test="addr != null and addr != ''">addr,</if>
@@ -493,6 +499,7 @@
         <if test="department != null and department != ''">#{department},</if>
         <if test="nature != null and nature != ''">#{nature},</if>
         <if test="cardNum != null and cardNum != ''">#{cardNum},</if>
+        <if test="cardNumSimple != null and cardNumSimple != ''">#{cardNumSimple},</if>
         <if test="education != null and education != ''">#{education},</if>
         <if test="nationality != null and nationality != ''">#{nationality},</if>
         <if test="addr != null and addr != ''">#{addr},</if>
@@ -528,7 +535,8 @@
             <if test="position != null ">position = #{position},</if>
             <if test="department != null ">department = #{department},</if>
             <if test="nature != null and nature!=''">nature = #{nature},</if>
-            <if test="cardNum != null ">card_num = #{cardNum},</if>
+            card_num = #{cardNum},
+            card_num_simple = #{cardNumSimple},
             <if test="education != null and education!=''">education = #{education},</if>
             <if test="nationality != null and nationality!=''">nationality = #{nationality},</if>
             <if test="addr != null and addr != ''">addr = #{addr},</if>
@@ -568,6 +576,7 @@
             <if test="department != null ">department = #{department},</if>
             <if test="nature != null and nature!=''">nature = #{nature},</if>
             card_num = #{cardNum},
+            card_num_simple = #{cardNumSimple},
             <if test="education != null and education!=''">education = #{education},</if>
             <if test="nationality != null and nationality!=''">nationality = #{nationality},</if>
             <if test="addr != null and addr != ''">addr = #{addr},</if>
@@ -606,6 +615,7 @@
             <if test="department != null ">department = #{department},</if>
             <if test="nature != null and nature!=''">nature = #{nature},</if>
             card_num = #{cardNum},
+            card_num_simple = #{cardNumSimple},
             <if test="education != null and education!=''">education = #{education},</if>
             <if test="nationality != null and nationality!=''">nationality = #{nationality},</if>
             <if test="addr != null and addr != ''">addr = #{addr},</if>
@@ -795,7 +805,7 @@
     </select>
 
     <select id="selectUserInfoByCardNum" resultType="com.zd.model.entity.SysUser">
-        SELECT user_id,nick_name,card_num FROM sys_user u WHERE u.card_num = #{cardNum}
+        SELECT user_id,nick_name,card_num,card_num_simple FROM sys_user u WHERE u.card_num_simple = #{cardNumSimple}
     </select>
 
     <select id="getSafeUserList" parameterType="com.zd.model.entity.SysUser" resultMap="SysUserResult">