yangdamao пре 2 година
родитељ
комит
77baff5ace
39 измењених фајлова са 599 додато и 170 уклоњено
  1. 5 2
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java
  2. 3 2
      zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java
  3. 1 1
      zhongzheng-admin/src/main/resources/application.yml
  4. 10 2
      zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java
  5. 19 14
      zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java
  6. 60 16
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java
  7. 3 2
      zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java
  8. 5 4
      zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java
  9. 2 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java
  10. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectMapper.java
  11. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectService.java
  12. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseFileServiceImpl.java
  13. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectServiceImpl.java
  14. 1 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListBo.java
  15. 33 25
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java
  16. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsAttachedVo.java
  17. 21 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassUserNumBo.java
  18. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeGoodsMapper.java
  19. 2 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeGoodsService.java
  20. 3 1
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java
  21. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeGoodsServiceImpl.java
  22. 170 46
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java
  23. 25 20
      zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassNpUserInfoVo.java
  24. 51 5
      zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java
  25. 5 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppAccountLoginBo.java
  26. 3 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordAddBo.java
  27. 9 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserMapper.java
  28. 4 0
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java
  29. 3 2
      zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java
  30. 10 0
      zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml
  31. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/exam/ExamArrangementStudentMapper.xml
  32. 11 1
      zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsAttachedMapper.xml
  33. 11 0
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeGoodsMapper.xml
  34. 30 9
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml
  35. 1 1
      zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml
  36. 31 0
      zhongzheng-system/src/main/resources/mapper/modules/user/UserExamWrongRecordMapper.xml
  37. 40 10
      zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml
  38. 2 2
      zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml
  39. 3 3
      zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

+ 5 - 2
zhongzheng-admin/src/main/java/com/zhongzheng/controller/common/CommonController.java

@@ -40,6 +40,7 @@ import com.zhongzheng.modules.system.domain.SysTenant;
 import com.zhongzheng.modules.system.service.ISysTenantService;
 import com.zhongzheng.modules.system.service.ISysUserService;
 import com.zhongzheng.modules.system.vo.SysTenantVo;
+import com.zhongzheng.modules.user.service.IUserService;
 import com.zhongzheng.modules.user.vo.UserExportVo;
 import com.zhongzheng.modules.wx.bo.WxShareGoodsBo;
 import com.zhongzheng.modules.wx.service.IWxPayService;
@@ -94,7 +95,8 @@ public class CommonController
     private  IClassGradeService iClassGradeService;
     @Autowired
     private ISysTenantService iSysTenantService;
-
+    @Autowired
+    private IUserService iUserService;
     /**
      * 通用下载请求
      *
@@ -296,7 +298,8 @@ public class CommonController
     @GetMapping("common/jzs/grade")
     public AjaxResult<Void> testGrade()
     {
-        iClassGradeService.checkEjjjPeopleNumLimit(195L,984L);
+     //   iClassGradeService.checkEjjjPeopleNumLimit(195L,984L);
+        iUserService.batchUpdateTelId();
         return AjaxResult.success();
     }
 

+ 3 - 2
zhongzheng-admin/src/main/java/com/zhongzheng/controller/course/CourseController.java

@@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.modules.course.bo.*;
 import com.zhongzheng.modules.course.service.ICourseService;
@@ -205,7 +206,7 @@ public class CourseController extends BaseController {
     @GetMapping("/goodsList")
     public TableDataInfo<GoodsUserVo> goodsList(CourseQueryBo bo) {
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone, bo.getTelphone()).last("limit 1"));
+                .eq(User::getTelphone, EncryptHandler.encrypt(bo.getTelphone())).last("limit 1"));
         if(Validator.isEmpty(user)){
             throw new CustomException("该用户不存在");
         }
@@ -224,7 +225,7 @@ public class CourseController extends BaseController {
         }
         for(CourseProgressQueryBo queryBo : bo.getTelphoneList()){
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getTelphone, queryBo.getTelphone()).last("limit 1"));
+                    .eq(User::getTelphone, EncryptHandler.encrypt(queryBo.getTelphone())).last("limit 1"));
             if(Validator.isEmpty(user)){
                 continue;
             }

+ 1 - 1
zhongzheng-admin/src/main/resources/application.yml

@@ -117,7 +117,7 @@ token:
     # 令牌密钥
     secret: abcdefghijklmnopqrstuvwxyz
     # 令牌有效期(默认30分钟)
-    expireTime: 4320
+    expireTime: 360
 
 # MyBatis配置
 # https://baomidou.com/config/

+ 10 - 2
zhongzheng-api/src/main/java/com/zhongzheng/controller/cmmon/CommonController.java

@@ -58,6 +58,9 @@ public class CommonController extends BaseController {
 
     private final WxLoginService wxLoginService;
 
+    private final ISysConfigService configService;
+
+
     @Autowired
     private RedisCache redisCache;
 
@@ -120,8 +123,6 @@ public class CommonController extends BaseController {
         return AjaxResult.success(iCourseTopicService.getGoodsList(bo));
     }
 
-    private final ISysConfigService configService;
-
 
     /**
      * 查询课程列表
@@ -168,6 +169,13 @@ public class CommonController extends BaseController {
         return AjaxResult.success(map);
     }
 
+    @ApiOperation("登录双重验证")
+    @GetMapping("/dual_auth")
+    public AjaxResult<String> dual_auth() {
+        String dualAuth = configService.selectConfigByKey("login.dual.auth");
+        return AjaxResult.success("成功",dualAuth);
+    }
+
     /**
      * 公众号服务接口
      */

+ 19 - 14
zhongzheng-common/src/main/java/com/zhongzheng/common/type/EncryptHandler.java

@@ -14,18 +14,18 @@ import java.sql.SQLException;
 
 @MappedJdbcTypes(JdbcType.VARCHAR)
 public class EncryptHandler  implements TypeHandler<String> {
-    /**
-     * 线上运行后勿修改,会影响已加密数据解密
-     */
+
     private static final byte[] KEYS = "base20230213zzkj".getBytes(StandardCharsets.UTF_8);
 
+    public static final boolean ENCRYPT_STATUS = false; //是否开启字段加密
+
 
 
     public String decrypt(String value) {
         if (null == value) {
             return null;
         }
-        if (value.length()<20 ) {
+        if (value.length()<=20 ) {
             return value;
         }
         return SecureUtil.aes(KEYS).decryptStr(value);
@@ -35,9 +35,14 @@ public class EncryptHandler  implements TypeHandler<String> {
         if (null == value) {
             return null;
         }
-        AES aes = SecureUtil.aes(KEYS);
-        String encrypt = aes.encryptHex(value);
-        return encrypt;
+        if(ENCRYPT_STATUS){
+            AES aes = SecureUtil.aes(KEYS);
+            String encrypt = aes.encryptHex(value);
+            return encrypt;
+        }else{
+            return value;
+        }
+
     }
 
     @Override
@@ -46,17 +51,17 @@ public class EncryptHandler  implements TypeHandler<String> {
             preparedStatement.setString(i, null);
             return;
         }
-        preparedStatement.setString(i, s);
-    //    String encrypt = encrypt(s);
-    //    preparedStatement.setString(i, encrypt);
-
+        String encrypt = encrypt(s);
+        preparedStatement.setString(i, encrypt);
     }
 
     @Override
     public String getResult(ResultSet resultSet, String s) throws SQLException {
-        return resultSet.getString(s);
-    //    return decrypt(resultSet.getString(s));
-
+        if(ENCRYPT_STATUS){
+            return decrypt(resultSet.getString(s));
+        }else{
+            return resultSet.getString(s);
+        }
     }
 
     @Override

+ 60 - 16
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/UserServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -45,6 +46,8 @@ import com.zhongzheng.modules.grade.service.IClassGradeUserService;
 import com.zhongzheng.modules.grade.vo.ClassGradeUserGoodsVo;
 import com.zhongzheng.modules.inform.domain.InformSysUser;
 import com.zhongzheng.modules.order.domain.OrderBillGoods;
+import com.zhongzheng.modules.order.domain.OrderGoodsRefund;
+import com.zhongzheng.modules.system.service.ISysConfigService;
 import com.zhongzheng.modules.user.bo.*;
 import com.zhongzheng.modules.user.domain.*;
 import com.zhongzheng.modules.user.entity.ClientLoginUser;
@@ -124,6 +127,8 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
 
     @Autowired
     private IUserLoginErrorService iUserLoginErrorService;
+    @Autowired
+    private  ISysConfigService configService;
 
 
     @Override
@@ -373,7 +378,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             //手机号变更
             if(Validator.isEmpty(oldUser.getTelphone()) || !oldUser.getTelphone().equals(update.getTelphone())){
                 User user = getOne(new LambdaQueryWrapper<User>()
-                        .eq(User::getTelphone,update.getTelphone()).ne(User::getUserId,update.getUserId()).last("limit 1"));
+                        .eq(User::getTelphone,EncryptHandler.encrypt(update.getTelphone())).ne(User::getUserId,update.getUserId()).last("limit 1"));
                 if(Validator.isNotNull(user)){
                     throw new CustomException("该手机号已注册");
                 }
@@ -417,7 +422,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             //手机号变更
             if(Validator.isEmpty(oldUser.getTelphone()) || !oldUser.getTelphone().equals(update.getTelphone())){
                 User user = getOne(new LambdaQueryWrapper<User>()
-                        .eq(User::getTelphone,update.getTelphone()).ne(User::getUserId,update.getUserId()).last("limit 1"));
+                        .eq(User::getTelphone,EncryptHandler.encrypt(update.getTelphone())).ne(User::getUserId,update.getUserId()).last("limit 1"));
                 if(Validator.isNotNull(user)){
                     throw new CustomException("该手机号已注册");
                 }
@@ -645,13 +650,13 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             throw new CustomException("真实姓名不能为空");
         }*/
         User user = getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
         if(Validator.isNotNull(user)){
             throw new CustomException("该手机号已注册");
         }
         if(Validator.isNotEmpty(bo.getIdCard())){
             User user2 = getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getIdCard,bo.getIdCard()).last("limit 1"));
+                    .eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdCard())).last("limit 1"));
             if(Validator.isNotNull(user2)){
                 throw new CustomException("该身份证已被使用");
             }
@@ -703,7 +708,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             throw new CustomException("验证码错误");
         }
         User user = getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
         if(Validator.isNotNull(user)){
             throw new CustomException("该手机号已注册");
         }
@@ -776,7 +781,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 itemImport.setSubjectIds(ToolsUtils.join(",", sIdList));
             }
             User user = getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getTelphone,itemImport.getTelphone()).last("limit 1"));
+                    .eq(User::getTelphone,EncryptHandler.encrypt(itemImport.getTelphone())).last("limit 1"));
             if(Validator.isNotNull(user)){
                 if(Validator.isNotEmpty(user.getIdCard())&&Validator.isNotEmpty(itemImport.getIdCard())&&!itemImport.getIdCard().equals(user.getIdCard())){
                     throw new CustomException(itemImport.getRealname()+"身份证号码不一致");
@@ -803,7 +808,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 continue;
             }else{
                 User user2 = getOne(new LambdaQueryWrapper<User>()
-                        .eq(User::getIdCard,itemImport.getIdCard()).last("limit 1"));
+                        .eq(User::getIdCard,EncryptHandler.encrypt(itemImport.getIdCard())).last("limit 1"));
                 if(Validator.isNotEmpty(user2)){
                     throw new CustomException(itemImport.getRealname()+"身份证号码已存在,创建失败");
                 }
@@ -878,7 +883,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
                 throw new CustomException("用户手机号码缺失");
             }
             User user1 = getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getTelphone,bo.getTelphone()).last("limit 1"));
+                    .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTelphone())).last("limit 1"));
             //手机号码存在
             if(Validator.isNotEmpty(user1)){
                 UserIdCardBatchVo user = BeanUtil.toBean(bo, UserIdCardBatchVo.class);
@@ -947,14 +952,15 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
             throw new CustomException("该账号不存在!");
         }
         UserPhoneBo phoneBo = JSONObject.parseObject(cacheObject.toString(), UserPhoneBo.class);
-        if(Validator.isEmpty(phoneBo.getTelphone())){
+        if(Validator.isEmpty(phoneBo.getTelphone()) && Validator.isEmpty(phoneBo.getIdNum())){
             throw new CustomException("账号不能为空");
         }
-        User user;
+        User user = null;
         if (StringUtils.isNotBlank(phoneBo.getIdNum())){
             //身份证登入
             user = baseMapper.queryUserByIdNumTenant(phoneBo.getIdNum(), phoneBo.getTenantId());
-        }else {
+        }
+        if (ObjectUtils.isNull(user)){
             user = baseMapper.queryUserByTelphoneTenant(phoneBo.getTelphone(), phoneBo.getTenantId());
         }
 
@@ -975,6 +981,32 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         return baseMapper.getUserByTelNotTenant(telphone);
     }
 
+    @Override
+    public List<User> getUserByIdNumNotTenant(String idNum) {
+        return baseMapper.getUserByIdNumNotTenant(idNum);
+    }
+
+    @Override
+    public void batchUpdateTelId() {
+        List<User> list = baseMapper.selectAllUserList();
+        list.forEach(item -> {
+            boolean isUpdate = false;
+            UserQueryBo queryBo = new UserQueryBo();
+            queryBo.setUserId(item.getUserId());
+            if(Validator.isNotEmpty(item.getIdCard())&&item.getIdCard().length()<=20){
+                isUpdate = true;
+                queryBo.setIdCard(EncryptHandler.encrypt(item.getIdCard()));
+            }
+            if(Validator.isNotEmpty(item.getTelphone())&&item.getTelphone().length()<=20){
+                isUpdate = true;
+                queryBo.setTelphone(EncryptHandler.encrypt(item.getTelphone()));
+            }
+            if(isUpdate){
+           //     baseMapper.editUserInfo(queryBo);
+            }
+        });
+    }
+
     private Long findSubjectId(String subject){
         if(subject!=null){
             String key = "SUB_"+subject;
@@ -1016,7 +1048,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
         redisCache.deleteObject(key);
         User user = getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
@@ -1042,7 +1074,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
         redisCache.deleteObject(key);
         User user = getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
@@ -1075,7 +1107,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         }
         redisCache.deleteObject(key);
         User user = getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
         if(Validator.isNotEmpty(user)){
             throw new CustomException("该手机号已被注册");
         }
@@ -1099,10 +1131,22 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(Validator.isEmpty(bo.getAccount())){
             throw new CustomException("账号不能为空");
         }
+       /* String dualAuth = configService.selectConfigByKey("login.dual.auth");
+        if(Validator.isNotEmpty(dualAuth)&&dualAuth.equals("1")){
+            String key = Constants.LOGIN_SMS + bo.getTel();
+            String code =  redisCache.getCacheObject(key);
+            if(code==null){
+                throw new CustomException("验证码错误");
+            }
+            if(!code.equals(bo.getCode())){
+                iUserLoginErrorService.saveErrorLog(bo.getTel());
+                throw new CustomException("验证码错误");
+            }
+        }*/
         iUserLoginErrorService.checkLimit(bo.getAccount());
         LambdaQueryWrapper<User> queryWrapper =new LambdaQueryWrapper<User>();
         queryWrapper.and(wq -> wq
-                .eq(User::getTelphone,bo.getAccount())
+                .eq(User::getTelphone,EncryptHandler.encrypt(bo.getAccount()))
                 .or()
                 .eq(User::getIdCard,bo.getAccount()));
         User user = getOne(queryWrapper);
@@ -1155,7 +1199,7 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IU
         if(Validator.isEmpty(bo.getRealname())){
             throw new CustomException("数据缺失");
         }
-        User userBak = getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard,bo.getIdCard()).last("limit 1"));
+        User userBak = getOne(new LambdaQueryWrapper<User>().eq(User::getIdCard,EncryptHandler.encrypt(bo.getIdCard())).last("limit 1"));
         if(!Validator.isEmpty(userBak)){
             throw new CustomException("该身份证已使用");
         }

+ 3 - 2
zhongzheng-framework/src/main/java/com/zhongzheng/framework/web/service/WxLoginService.java

@@ -18,6 +18,7 @@ import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
 
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.*;
 import com.zhongzheng.common.utils.http.HttpUtils;
 import com.zhongzheng.common.utils.ip.IpUtils;
@@ -392,7 +393,7 @@ public class WxLoginService implements IWxLoginService {
             throw new CustomException("该微信没有绑定手机号码" + resultString);
         }
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone, phoneNumber).last("limit 1"));
+                .eq(User::getTelphone, EncryptHandler.encrypt(phoneNumber)).last("limit 1"));
         if (Validator.isNotEmpty(user)) {
             user.setOpenId(openId);
             user.setUnionId(unionId);
@@ -416,7 +417,7 @@ public class WxLoginService implements IWxLoginService {
                 throw new CustomException("注册失败");
             }
             user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getTelphone, phoneNumber).last("limit 1"));
+                    .eq(User::getTelphone, EncryptHandler.encrypt(phoneNumber)).last("limit 1"));
         }
         return user;
     }

+ 5 - 4
zhongzheng-system/src/main/java/com/zhongzheng/modules/alisms/service/impl/AliSmsServiceImpl.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.zhongzheng.common.constant.Constants;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.SmsUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
@@ -93,7 +94,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
             throw new CustomException("手机号码不能为空");
         }
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,tel).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(tel)).last("limit 1"));
         if(Validator.isNotNull(user)){
             throw new CustomException("该手机号已注册");
         }
@@ -126,7 +127,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
             throw new CustomException("手机号码不能为空");
         }
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,tel).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(tel)).last("limit 1"));
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
@@ -158,7 +159,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
             throw new CustomException("手机号码不能为空");
         }
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,tel).last("limit 1"));
+                .eq(User::getTelphone,EncryptHandler.encrypt(tel)).last("limit 1"));
         if(Validator.isEmpty(user)){
             throw new CustomException("该手机号未注册");
         }
@@ -213,7 +214,7 @@ public class AliSmsServiceImpl implements IAliSmsService {
             throw new CustomException("手机号码不能为空");
         }
         User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                .eq(User::getTelphone,tel).last("limit 1"));
+                .eq(User::getTelphone, EncryptHandler.encrypt(tel)).last("limit 1"));
         if(Validator.isNotEmpty(user)){
             throw new CustomException("该手机号已被使用");
         }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/base/service/impl/UserProfileServiceImpl.java

@@ -18,6 +18,7 @@ import com.zhongzheng.common.annotation.DataScope;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.domain.model.LoginUser;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.SecurityUtils;
 import com.zhongzheng.common.utils.ServletUtils;
@@ -501,7 +502,7 @@ public class UserProfileServiceImpl extends ServiceImpl<UserProfileMapper, UserP
                     UserVo user = iUserService.queryById(bo.getUserId());
                     if(Validator.isNotEmpty(user)&&Validator.isEmpty(user.getIdCard())){ //身份证为空是覆盖
                         User user2 = iUserService.getOne(new LambdaQueryWrapper<User>()
-                                .eq(User::getIdCard,idcard).last("limit 1"));
+                                .eq(User::getIdCard, EncryptHandler.encrypt(idcard)).last("limit 1"));
                         if(Validator.isNotEmpty(user2)){
                             throw new CustomException("身份证号码已存在,创建失败");
                         }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/mapper/CourseSubjectMapper.java

@@ -38,4 +38,7 @@ public interface CourseSubjectMapper extends BaseMapper<CourseSubject> {
 
     @InterceptorIgnore(tenantLine = "true")
     List<CourseSubject> listByIdsTenant(ClassGradeListBo bgListBo);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<CourseSubject> getListByIDs(@Param("ids") List<Long> ids);
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/ICourseSubjectService.java

@@ -60,4 +60,5 @@ public interface ICourseSubjectService extends IService<CourseSubject> {
 
 	List<CourseSubject> listByIdsTenant(ClassGradeListBo bgListBo);
 
+    List<CourseSubject> getListByIDs(List<Long> ids);
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseFileServiceImpl.java

@@ -43,6 +43,7 @@ public class CourseFileServiceImpl extends ServiceImpl<CourseFileMapper, CourseF
         lqw.eq(bo.getStatus() != null, CourseFile::getStatus, bo.getStatus());
         lqw.eq(bo.getHandoutsId() != null, CourseFile::getHandoutsId, bo.getHandoutsId());
         lqw.eq(bo.getSort() != null, CourseFile::getSort, bo.getSort());
+        lqw.orderByAsc(CourseFile::getSort);
         return entity2Vo(this.list(lqw));
     }
 

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/course/service/impl/CourseSubjectServiceImpl.java

@@ -195,4 +195,9 @@ public class CourseSubjectServiceImpl extends ServiceImpl<CourseSubjectMapper, C
     public List<CourseSubject> listByIdsTenant(ClassGradeListBo bgListBo) {
         return baseMapper.listByIdsTenant(bgListBo);
     }
+
+    @Override
+    public List<CourseSubject> getListByIDs(List<Long> ids) {
+        return baseMapper.getListByIDs(ids);
+    }
 }

+ 1 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/bo/UserGoodsListBo.java

@@ -27,4 +27,5 @@ public class UserGoodsListBo implements Serializable {
     @ApiModelProperty("签名")
     @NotBlank(message = "签名不能为空")
     private String sign;
+
 }

+ 33 - 25
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/service/impl/GoodsServiceImpl.java

@@ -1060,13 +1060,15 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
 
     @Override
     public List<UserGoodsListVo> getUserGoodsList(UserGoodsListBo bo) {
-        if (Validator.isEmpty(bo.getTelphone())) {
-            throw new CustomException("参数错误");
+        List<User> users = null;
+        if (StringUtils.isNotBlank(bo.getIdNum())){
+            users = iUserService.getUserByIdNumNotTenant(bo.getIdNum());
+        }
+        if (CollectionUtils.isEmpty(users)){
+            users = iUserService.getUserByTelNotTenant(bo.getTelphone());
         }
-
-        List<User> users = iUserService.getUserByTelNotTenant(bo.getTelphone());
         if (CollectionUtils.isEmpty(users)) {
-            throw new CustomException("通过手机号获取用户信息失败");
+            throw new CustomException("用户信息获取有误:"+JSONObject.toJSONString(bo));
         }
         //获取用户订单商品信息
         List<UserGoodsListVo> voList = new ArrayList<>();
@@ -1079,9 +1081,12 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             return new ArrayList<>();
         }
 
-        String nowTime = DateUtils.getNowTime().toString()+ToolsUtils.getCharAndNumr(4);
-        voList.forEach(goodsVo -> {
+//        String nowTime = DateUtils.getNowTime().toString()+ToolsUtils.getCharAndNumr(4);
+        for (UserGoodsListVo goodsVo : voList) {
             User user = users.stream().filter(x -> x.getTenantId().equals(goodsVo.getTenantId())).findFirst().orElse(null);
+            Long tenantId = goodsVo.getTenantId();
+            //缓存用户信息key
+            String key = String.format("KQTZ%s",user.getUserId());
             //已学和未学
             Long secLong = 0L;
             Long studyLong = 0L;
@@ -1091,7 +1096,6 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             subjectStudyRecordQueryBo.setOrderGoodsId(goodsVo.getOrderGoodsId());
             subjectStudyRecordQueryBo.setGradeId(goodsVo.getGradeId());
             subjectStudyRecordQueryBo.setTenantId(goodsVo.getTenantId());
-            Long tenantId = goodsVo.getTenantId();
             List<SubjectStudyRecordVo> subjectStudyRecordVos = iUserStudyRecordService.listSubjectTenant(subjectStudyRecordQueryBo);
             for (SubjectStudyRecordVo subjectStudyRecordVo : subjectStudyRecordVos) {
                 secLong = new BigDecimal(secLong.toString()).add(new BigDecimal(subjectStudyRecordVo.getSectionNum().toString())).longValue();
@@ -1133,24 +1137,24 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
             }
             if (goodsVo.getCourseType() == 2) {
                 //题库
-                goodsVo.setToWeAppPagePath("/pages/questionBank/index?skipPort="+nowTime);
+                goodsVo.setToWeAppPagePath("/pages/questionBank/index?skipPort="+key);
             } else if (goodsVo.getCourseType() == 6) {
                 //直播
                 goodsVo.setToWeAppPagePath(String.format("/pages3/live/detail?orderGoodsId=%s&goodsId=%s&gradeId=0&courseId=%s&skipPort=%s",
-                        goodsVo.getOrderGoodsId(), goodsVo.getGoodsId(), goodsVo.getCourseId(),nowTime));
+                        goodsVo.getOrderGoodsId(), goodsVo.getGoodsId(), goodsVo.getCourseId(),key));
             } else {
                 //视频
                 goodsVo.setToWeAppPagePath(String.format("/pages3/polyv/detail?id=%s&goodsId=%s&orderGoodsId=%s&gradeId=%s&skipPort=%s",
-                        goodsVo.getCourseId(), goodsVo.getGoodsId(), goodsVo.getOrderGoodsId(), goodsVo.getGradeId(),nowTime));
+                        goodsVo.getCourseId(), goodsVo.getGoodsId(), goodsVo.getOrderGoodsId(), goodsVo.getGradeId(),key));
             }
             UserPhoneBo phoneBo = new UserPhoneBo();
             phoneBo.setTelphone(bo.getTelphone());
             phoneBo.setTenantId(tenantId);
             phoneBo.setIdNum(bo.getIdNum());
-            //缓存用户手机号码 30分钟失效
-            redisCache.setCacheObjectTenant(tenantId+":"+nowTime, JSONObject.toJSONString(phoneBo), 30, TimeUnit.MINUTES);
 
-        });
+            //缓存用户信息
+            redisCache.setCacheObjectTenant(tenantId+":"+key, JSONObject.toJSONString(phoneBo), 12, TimeUnit.HOURS);
+        }
         return voList;
     }
 
@@ -1253,12 +1257,14 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         if (ObjectUtils.isNull(goods)) {
             throw new CustomException("商品不存在!");
         }
-        User user;
+        User user = null;
         if (StringUtils.isNotBlank(bo.getIdNum())){
             user = iUserService.queryUserByIdNumTenant(bo.getIdNum(), bo.getTenantId());
-        }else {
+        }
+        if (ObjectUtils.isNull(user)){
             user = iUserService.queryUserByTelphoneTenant(bo.getTelphone(), bo.getTenantId());
         }
+
         if (ObjectUtils.isNull(user)) {
             throw new CustomException("用户不存在!");
         }
@@ -1267,38 +1273,39 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         if (ObjectUtils.isNull(vo)) {
             throw new CustomException("用户没有购买该商品!");
         }
+        //缓存用户信息key
+        String key = String.format("KQTZ%s",user.getUserId());
         //商品课程
         Long courseId = 0L;
         List<Long> courseIds = iGoodsCourseService.getCourseIdsByGoodsAndTenant(bo.getGoodsId(), bo.getTenantId());
         if (CollectionUtils.isNotEmpty(courseIds) && courseIds.size() == 1) {
             courseId = courseIds.get(0);
         }
-        String nowTime = DateUtils.getNowTime().toString()+ToolsUtils.getCharAndNumr(4);
         if (bo.getSkipPort() == 1) {
             //PC端
             if (goods.getGoodsType() == 2) {
                 //题库
-                url = String.format("%sperson-center/my-bank/index?goodsId=%s&skipPort=%s", domain, vo.getGoodsId(), nowTime);
+                url = String.format("%sperson-center/my-bank/index?goodsId=%s&skipPort=%s", domain, vo.getGoodsId(), key);
             } else if (goods.getGoodsType() == 6) {
                 //直播
-                url = String.format("%sperson-center/my-live?goodsId=%s&skipPort=%s", domain, vo.getGoodsId(), nowTime);
+                url = String.format("%sperson-center/my-live?goodsId=%s&skipPort=%s", domain, vo.getGoodsId(), key);
             } else {
                 //视频
-                url = String.format("%smy-course-detail/%s?gradeId=%s&orderGoodsId=%s&skipPort=%s", domain, vo.getGoodsId(), vo.getGradeId(), vo.getOrderGoodsId(), nowTime);
+                url = String.format("%smy-course-detail/%s?gradeId=%s&orderGoodsId=%s&skipPort=%s", domain, vo.getGoodsId(), vo.getGradeId(), vo.getOrderGoodsId(), key);
             }
         } else {
             //H5
             if (goods.getGoodsType() == 2) {
                 //题库
-                url = String.format("%s/pages/questionBank/index?skipPort=%s", domainH5, nowTime);
+                url = String.format("%s/pages/questionBank/index?skipPort=%s", domainH5, key);
             } else if (goods.getGoodsType() == 6) {
                 //直播
                 url = String.format("%s/pages3/live/detail?orderGoodsId=%s&goodsId=%s&gradeId=0&courseId=%s&skipPort=%s",
-                        domainH5, vo.getOrderGoodsId(), vo.getGoodsId(), courseId, nowTime);
+                        domainH5, vo.getOrderGoodsId(), vo.getGoodsId(), courseId, key);
             } else {
                 //视频
                 url = String.format("%s/pages3/polyv/detail?id=%s&goodsId=%s&orderGoodsId=%s&gradeId=%s&skipPort=%s",
-                        domainH5, courseId, vo.getGoodsId(), vo.getOrderGoodsId(), vo.getGradeId(), nowTime);
+                        domainH5, courseId, vo.getGoodsId(), vo.getOrderGoodsId(), vo.getGradeId(), key);
             }
         }
         UserPhoneBo phoneBo = new UserPhoneBo();
@@ -1306,8 +1313,9 @@ public class GoodsServiceImpl extends ServiceImpl<GoodsMapper, Goods> implements
         phoneBo.setTenantId(bo.getTenantId());
         phoneBo.setIdNum(bo.getIdNum());
         log.info(String.format("旧系统获取商品学习中心路径:%s(url),%s(tenantId)",url,bo.getTenantId()));
-        //缓存用户手机号码 30分钟失效
-        redisCache.setCacheObjectTenant(bo.getTenantId()+":"+nowTime, JSONObject.toJSONString(phoneBo), 30, TimeUnit.MINUTES);
+
+       //缓存用户信息
+        redisCache.setCacheObjectTenant(bo.getTenantId()+":"+key, JSONObject.toJSONString(phoneBo), 12, TimeUnit.HOURS);
         return url;
     }
 

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/goods/vo/GoodsAttachedVo.java

@@ -88,4 +88,8 @@ public class GoodsAttachedVo {
 	private String externalLink;
 	@ApiModelProperty("是否外链商品:0否 1是")
 	private Integer externalLinkStatus;
+	/** 开启模拟考 1启动(考试类型才能启动) 0关闭 */
+	@Excel(name = "开启模拟考 1启动(考试类型才能启动) 0关闭")
+	@ApiModelProperty("开启模拟考 1启动(考试类型才能启动) 0关闭")
+	private Integer simulateStatus;
 }

+ 21 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/bo/ClassUserNumBo.java

@@ -0,0 +1,21 @@
+package com.zhongzheng.modules.grade.bo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import java.io.Serializable;
+
+/**
+ * @author yangdamao
+ * @date 2023年02月08日 11:23
+ */
+@Data
+public class ClassUserNumBo implements Serializable {
+
+    @ApiModelProperty("业务层次名称")
+    private String officialName;
+
+    @ApiModelProperty("序号")
+    private Integer num;
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/mapper/ClassGradeGoodsMapper.java

@@ -15,4 +15,6 @@ import java.util.List;
 public interface ClassGradeGoodsMapper extends BaseMapper<ClassGradeGoods> {
 
     List<ClassGradeGoods> getGradeGoodsList(@Param("goodsId") Long goodsId);
+
+    List<ClassGradeGoods> getClassGradeByIds(@Param("goodsIds")List<Long> goodsIds);
 }

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeGoodsService.java

@@ -51,4 +51,6 @@ public interface IClassGradeGoodsService extends IService<ClassGradeGoods> {
 	Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
 
     List<ClassGradeGoods> getGradeGoodsList(Long goodsId);
+
+	List<ClassGradeGoods> getClassGradeByIds(List<Long> goodsIds);
 }

+ 3 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/IClassGradeService.java

@@ -85,6 +85,8 @@ public interface IClassGradeService extends IService<ClassGrade> {
 
 	boolean checkEjjjPeopleNumLimit(Long businessId,Long gradeId);
 
+	boolean checkClassUserNum(Long businessId,Long gradeId);
+
 	List<ClassGradeVo> queryGradeList(ClassGradeQueryBo bo);
 
 	boolean gradeChangeEjjjPeople(Long businessId,Long gradeId);
@@ -93,7 +95,7 @@ public interface IClassGradeService extends IService<ClassGrade> {
 
 	List<ClassNpUserInfoVo> officialGradeDetail(ClassNpUserInfoBo bo);
 
-	String getOfficialGradeNum(ClassOfficialNumBo bo);
+	ClassUserNumBo getOfficialGradeNum(ClassOfficialNumBo bo);
 
 	List<ClassGrade> getGradeListByTenant(ClassGradeListBo bgListBo);
 

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeGoodsServiceImpl.java

@@ -102,4 +102,9 @@ public class ClassGradeGoodsServiceImpl extends ServiceImpl<ClassGradeGoodsMappe
     public List<ClassGradeGoods> getGradeGoodsList(Long goodsId) {
         return baseMapper.getGradeGoodsList(goodsId);
     }
+
+    @Override
+    public List<ClassGradeGoods> getClassGradeByIds(List<Long> goodsIds) {
+        return baseMapper.getClassGradeByIds(goodsIds);
+    }
 }

+ 170 - 46
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/service/impl/ClassGradeServiceImpl.java

@@ -6,6 +6,7 @@ import cn.hutool.core.lang.Validator;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.annotation.DataScope;
@@ -242,40 +243,92 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             Goods goods = iGoodsService.getById(goodsId);
             CourseBusiness business = iCourseBusinessService.getById(goods.getBusinessId());
             if (ObjectUtils.isNotNull(business) && ObjectUtils.isNotNull(business.getTemplateStatus()) && business.getTemplateStatus() == 1){
-                List<CourseSubject> courseSubjectList = iCourseSubjectService.listByIds(Arrays.asList(goods.getSubjectIds().split(",")));
-                List<String> subNames = courseSubjectList.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
-                List<Long> subIds = iCourseSubjectService.getIdsByTenant(subNames);
-                //获取业务层次下所有班级
-                ClassGradeListBo bgListBo = new ClassGradeListBo();
-                bgListBo.setAliasName(business.getAliasName());
-                bgListBo.setSubIds(subIds);
-                List<ClassGrade> classGrades = baseMapper.getGradeListByTenant(bgListBo);
-                if (CollectionUtils.isEmpty(classGrades)){
-                    //生成预报名官方编号
-                    add.setOfficialName(ServletUtils.getEncoded("PIY"));
-                    add.setClassStatus(0);
-                }else {
-                    //获取班级创建最多的机构
-                    Map<Long, List<ClassGrade>> map = classGrades.stream().collect(Collectors.groupingBy(ClassGrade::getTenantId));
-                    List<ClassGradeSortBo> sortList = new ArrayList<>();
-                    map.forEach((k,v) -> {
-                        ClassGradeSortBo sortBo = new ClassGradeSortBo();
-                        sortBo.setKey(k);
-                        sortBo.setSize(v.size());
-                        sortList.add(sortBo);
-                    });
-                    ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
-                    List<ClassGrade> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGrade::getCreateTime)).collect(Collectors.toList());
-                    //获取当前机构商品下的班级
-                    List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goodsId);
-                    if(gradeGoods.size() < classGradesMax.size()){
-                        ClassGrade classGrade = classGradesMax.get(gradeGoods.size());
-                        add.setOfficialName(classGrade.getRegisterCode());
-                        add.setClassStatus(0);
-                    }else {
+                if (net.polyv.common.v1.util.StringUtils.isNotBlank(business.getAliasName()) &&
+                        (business.getAliasName().equals("二级建造师") || business.getAliasName().equals("二级造价工程师"))){
+                    List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
+                            .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
+                            .eq(Goods::getBusinessId, goods.getBusinessId())
+                            .eq(Goods::getProjectId, goods.getProjectId())
+                            .eq(Goods::getSubjectIds, goods.getSubjectIds()));
+                    if (goodsList.size() > 1){
+                        //该业务层次下有多个商品
+                        List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
+                        List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService
+                                .list(new LambdaQueryWrapper<ClassGradeGoods>()
+                                        .in(ClassGradeGoods::getGoodsId, goodsIds));
+                        if (CollectionUtils.isNotEmpty(goodsGradeList)){
+                            Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
+                            List<ClassGradeSortBo> sortList = new ArrayList<>();
+                            map.forEach((k, v) -> {
+                                ClassGradeSortBo sortBo = new ClassGradeSortBo();
+                                sortBo.setKey(k);
+                                sortBo.setSize(v.size());
+                                sortList.add(sortBo);
+                            });
+                            ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
+                            List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
+                            //班级信息
+                            List<ClassGrade> listGrade = listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                            //获取当前机构商品下的班级
+                            List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
+                            if (gradeGoods.size() < listGrade.size()) {
+                                ClassGrade grade = list.get(gradeGoods.size());
+                                if (checkEjjjPeopleNumLimit(business.getId(),grade.getGradeId())){
+                                    add.setOfficialName(list.get(gradeGoods.size()).getOfficialName());
+                                    add.setClassStatus(0);
+                                }else {
+                                    add.setOfficialName(ServletUtils.getEncoded("PIY"));
+                                    add.setClassStatus(0);
+                                }
+                            }
+                        }
+                    }
+                }
+
+                if (StringUtils.isBlank(add.getOfficialName())){
+                    List<CourseSubject> courseSubjectList = iCourseSubjectService.listByIds(Arrays.asList(goods.getSubjectIds().split(",")));
+                    List<String> subNames = courseSubjectList.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
+                    List<Long> subIds = iCourseSubjectService.getIdsByTenant(subNames);
+                    //获取业务层次下所有班级
+                    ClassGradeListBo bgListBo = new ClassGradeListBo();
+                    bgListBo.setAliasName(business.getAliasName());
+                    bgListBo.setSubIds(subIds);
+                    List<ClassGrade> classGrades = baseMapper.getGradeListByTenant(bgListBo);
+                    if (CollectionUtils.isEmpty(classGrades)){
                         //生成预报名官方编号
                         add.setOfficialName(ServletUtils.getEncoded("PIY"));
                         add.setClassStatus(0);
+                    }else {
+                        //获取班级创建最多的机构
+                        Map<Long, List<ClassGrade>> map = classGrades.stream().collect(Collectors.groupingBy(ClassGrade::getTenantId));
+                        List<ClassGradeSortBo> sortList = new ArrayList<>();
+                        map.forEach((k,v) -> {
+                            ClassGradeSortBo sortBo = new ClassGradeSortBo();
+                            sortBo.setKey(k);
+                            Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
+                            sortBo.setSize(collect.keySet().size());
+                            sortList.add(sortBo);
+                        });
+                        ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
+                        List<ClassGrade> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGrade::getCreateTime)).collect(Collectors.toList());
+                        //去重
+                        List<String> codeStrs = new ArrayList<>();
+                        for (ClassGrade gradesMax : classGradesMax) {
+                            if (codeStrs.contains(gradesMax.getOfficialName())){
+                                continue;
+                            }
+                            codeStrs.add(gradesMax.getOfficialName());
+                        }
+                        //获取当前机构商品下的班级
+                        List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goodsId);
+                        if(gradeGoods.size() < codeStrs.size()){
+                            add.setOfficialName(codeStrs.get(gradeGoods.size()));
+                            add.setClassStatus(0);
+                        }else {
+                            //生成预报名官方编号
+                            add.setOfficialName(ServletUtils.getEncoded("PIY"));
+                            add.setClassStatus(0);
+                        }
                     }
                 }
             }
@@ -325,7 +378,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 throw new RuntimeException("班级商品信息查询失败");
             }
             Goods goods = iGoodsService.getById(gradeGoods.getGoodsId());
-            if (!checkEjjjPeopleNumLimit(goods.getBusinessId(),update.getGradeId())){
+            if (!checkClassUserNum(goods.getBusinessId(),update.getGradeId())){
                 throw new RuntimeException("班级人数超过上限,不能开班,请检查!");
             }
 
@@ -416,6 +469,18 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         ClassGrade grade = getById(update.getGradeId());
         if (ObjectUtils.isNotNull(grade) && ObjectUtils.isNotNull(grade.getClassStatus())
                 && StringUtils.isNotBlank(grade.getOfficialName()) && grade.getClassStatus() == 1){
+            //开班修改预报名班级下 所有班级
+            List<ClassGrade> list = list(new LambdaQueryWrapper<ClassGrade>().eq(ClassGrade::getOfficialName, update.getRegisterCode()));
+            if (CollectionUtils.isNotEmpty(list)){
+                update(new LambdaUpdateWrapper<ClassGrade>()
+                .set(ClassGrade::getOfficialName,update.getOfficialName())
+                .set(ClassGrade::getRegisterCode,update.getRegisterCode())
+                .set(ClassGrade::getClassStartTime,update.getClassStartTime())
+                .set(ClassGrade::getClassEndTime,update.getClassEndTime())
+                .set(ClassGrade::getClassStatus,update.getClassStatus())
+                .set(ClassGrade::getLearningStatus,update.getLearningStatus())
+                .in(ClassGrade::getGradeId,list.stream().map(ClassGrade::getGradeId).collect(Collectors.toList())));
+            }
             //官方班级开班通知旧系统
             ClassGradeOpenBo openBo = new ClassGradeOpenBo();
             openBo.setOfficialName(grade.getOfficialName());
@@ -921,6 +986,50 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                     return false;
                 }
             }
+        }
+        return true;
+    }
+
+
+    @Override
+    public boolean checkClassUserNum(Long businessId, Long gradeId) {
+        CourseBusinessQueryBo businessQueryBo = new CourseBusinessQueryBo();
+        businessQueryBo.setId(businessId);
+        String fullName = iCourseBusinessService.queryFullName(businessQueryBo);
+        if (("继续教育二级建造师".equals(fullName)) || ("继续教育二级造价师".equals(fullName))) {
+            //继教二建或者继教二造班级
+            ClassGradeVo gradeVo = queryById(gradeId);
+            if (Validator.isNotEmpty(gradeVo) && Validator.isNotEmpty(gradeVo.getOfficialName())) {
+                ClassGradeQueryBo queryBo = new ClassGradeQueryBo();
+                queryBo.setOfficialName(gradeVo.getOfficialName());
+                Integer peopleNum = queryOfficialGradeCount(queryBo);
+                //查询旧系统
+                Map<String, String> params = new HashMap<>();
+                Long nowTime = DateUtils.getNowTime();
+                String sign = ToolsUtils.EncoderByMd5(nowTime.toString() + "pubilc2022");
+                params.put("stamp", nowTime.toString());
+                params.put("sign", sign);
+                params.put("jsonstr", gradeVo.getOfficialName());
+                String respone = "";
+                Integer oldGradeNum = 0;
+                try {
+                    respone = HttpUtils.postFormBody(GRADE_COUNT_PATH, params);
+                    log.info("查询业务系统班级人数结果" + respone, "");
+                    if (!respone.contains("\"Status\":true")) {
+                        throw new CustomException("同步请求错误" + respone);
+                    }
+                    JSONObject jsonObject = (JSONObject) JSONObject.parse(respone);
+                    JSONArray dataArray = jsonObject.getJSONArray("Data");
+                    JSONObject fObject = dataArray.getJSONObject(0);
+                    oldGradeNum = (Integer) fObject.get("num");
+                } catch (IOException e) {
+                    log.info("查询业务系统班级人数失败参数" + params, "");
+                    throw new CustomException("同步查询班级人数请求错误" + e.getMessage());
+                }
+                if ((peopleNum + oldGradeNum) > 300) { //全系统平台二建班级人数不能超300
+                    return false;
+                }
+            }
 
         }
         return true;
@@ -1038,7 +1147,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
         result.forEach(item -> {
             String date = "yyyy-MM-dd HH:mm:ss";
             item.setOrderTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
-            item.setCreateTime(DateUtils.timestampToDateFormat(item.getCreateTimeLong(),date));
+            item.setCreateTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
             item.setDoTime(DateUtils.timestampToDateFormat(item.getDoTimeLong(),date));
             //机构名称
             SysTenant tenant = sysTenantService.getById(item.getTenantId());
@@ -1054,7 +1163,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             }
             //科目名称
             if(StringUtils.isNotBlank(item.getSubjectIds())){
-                List<CourseSubject> courseSubjectList = iCourseSubjectService.listByIds(Arrays.asList(item.getSubjectIds().split(",")));
+                List<CourseSubject> courseSubjectList = iCourseSubjectService.getListByIDs(Arrays.asList(item.getSubjectIds().split(",")).stream().map(x -> Long.valueOf(x)).collect(Collectors.toList()));
                 item.setMajorName(courseSubjectList.stream().filter(x -> StringUtils.isNotBlank(x.getSubjectName())).map(CourseSubject::getSubjectName).collect(Collectors.joining(",")));
             }
         });
@@ -1062,7 +1171,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
     }
 
     @Override
-    public String getOfficialGradeNum(ClassOfficialNumBo bo) {
+    public ClassUserNumBo getOfficialGradeNum(ClassOfficialNumBo bo) {
         List<Long> subIds = iCourseSubjectService.getIdsByTenant(Arrays.asList(bo.getSubName()));
         //获取业务层次下所有班级
         ClassGradeListBo bgListBo = new ClassGradeListBo();
@@ -1088,20 +1197,34 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             map.forEach((k,v) -> {
                 ClassGradeSortBo sortBo = new ClassGradeSortBo();
                 sortBo.setKey(k);
-                sortBo.setSize(v.size());
+                Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
+                sortBo.setSize(collect.keySet().size());
                 sortList.add(sortBo);
             });
             ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
             List<ClassGrade> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGrade::getCreateTime)).collect(Collectors.toList());
             if(bo.getSortNum() < classGradesMax.size()){
                 ClassGrade classGrade = classGradesMax.get(bo.getSortNum());
-               return classGrade.getOfficialName();
+                ClassUserNumBo classUserNumBo = new ClassUserNumBo();
+                classUserNumBo.setOfficialName(classGrade.getOfficialName());
+                ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
+                classGradeQueryBo.setOfficialName(classGrade.getOfficialName());
+                Integer count = baseMapper.queryOfficialGradeCount(classGradeQueryBo);
+                classUserNumBo.setNum(ObjectUtils.isNotNull(count)?count:0);
+               return classUserNumBo;
             }else {
                 //创建新预报名班级
                 creatClass(goodsIds.get(0),tenantId,encoded);
             }
         }
-        return encoded;
+
+        ClassUserNumBo classUserNumBo = new ClassUserNumBo();
+        classUserNumBo.setOfficialName(encoded);
+        ClassGradeQueryBo classGradeQueryBo = new ClassGradeQueryBo();
+        classGradeQueryBo.setOfficialName(encoded);
+        Integer count = baseMapper.queryOfficialGradeCount(classGradeQueryBo);
+        classUserNumBo.setNum(ObjectUtils.isNotNull(count)?count:0);
+        return classUserNumBo;
     }
 
     @Override
@@ -1121,7 +1244,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
 
         ClassGradeOpenUpBo openUpBo = new ClassGradeOpenUpBo();
         openUpBo.setGradeIds(ids);
-        openUpBo.setClassStatus(bo.getClassStatus());
+        openUpBo.setClassStatus(1);//开班
         openUpBo.setOfficialName(bo.getOfficialName());
         openUpBo.setClassName(bo.getClassName());
         openUpBo.setClassStartTime(bo.getClassStartTime());
@@ -1154,7 +1277,7 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
             result.forEach(item -> {
                 String date = "yyyy-MM-dd HH:mm:ss";
                 item.setOrderTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
-                item.setCreateTime(DateUtils.timestampToDateFormat(item.getCreateTimeLong(),date));
+                item.setCreateTime(DateUtils.timestampToDateFormat(item.getOrderTimeLong(),date));
                 item.setDoTime(DateUtils.timestampToDateFormat(item.getDoTimeLong(),date));
                 //机构名称
                 SysTenant tenant = sysTenantService.getById(item.getTenantId());
@@ -1165,24 +1288,25 @@ public class ClassGradeServiceImpl extends ServiceImpl<ClassGradeMapper, ClassGr
                 UserStudyRecord startRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(),item.getGradeId(),"ASC");
                 if (ObjectUtils.isNotNull(startRecord)){
                     item.setBeginTime(DateUtils.timestampToDateFormat(startRecord.getCreateTime(),date));
-                    UserStudyRecord endRecord = iUserStudyRecordService.getStudyRecord(item.getUserId(),item.getGradeId(),"DESC");
-                    item.setApplyTime(DateUtils.timestampToDateFormat(endRecord.getCreateTime(),date));
+                    item.setApplyTime(DateUtils.timestampToDateFormat(item.getApplyTimeLong(),date));
                 }
                 //科目名称
                 if(StringUtils.isNotBlank(item.getSubjectIds())){
                     List<CourseSubject> courseSubjectList = iCourseSubjectService.listByIds(Arrays.asList(item.getSubjectIds().split(",")));
                     item.setMajorName(courseSubjectList.stream().filter(x -> StringUtils.isNotBlank(x.getSubjectName())).map(CourseSubject::getSubjectName).collect(Collectors.joining(",")));
                 }
+                if (ObjectUtils.isNull(item.getReportStatu())){
+                    item.setReportStatu(0);
+                }
+                if (ObjectUtils.isNull(item.getStudyQueueStatus())){
+                    item.setStudyQueueStatus(0);
+                }
             });
         }
         //旧系统二建/二造班级学员信息
         bo.setClassNo(bo.getOfficialName());
-//        Map<String, String> params = new HashMap<>();
         Long nowTime = DateUtils.getNowTime();
         String sign = ToolsUtils.EncoderByMd5(nowTime.toString()+"pubilc2022");
-//        params.put("stamp", nowTime.toString());
-//        params.put("sign", sign);
-//        params.put("jsonstr", JSONObject.toJSONString(bo));
         bo.setSign(sign);
         bo.setStamp(nowTime);
         JSONObject param = JSONObject.parseObject(JSONObject.toJSONString(bo));

+ 25 - 20
zhongzheng-system/src/main/java/com/zhongzheng/modules/grade/vo/ClassNpUserInfoVo.java

@@ -1,5 +1,8 @@
 package com.zhongzheng.modules.grade.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.zhongzheng.common.type.EncryptHandler;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -20,12 +23,12 @@ public class ClassNpUserInfoVo implements Serializable {
 
     /// 机构id
     @ApiModelProperty("机构id")
-    private String tenantId; 
-    
+    private String tenantId;
+
     /// 机构名称
     @ApiModelProperty("机构名称")
     private String orgName;
-    
+
     /// 班级编号
     @ApiModelProperty("班级编号")
     private String classNo;
@@ -33,18 +36,18 @@ public class ClassNpUserInfoVo implements Serializable {
     /// 班级名称
     @ApiModelProperty("班级名称")
     private String categoryName;
-    
+
     /// 课程类型id,5二建继教,8二造继教
     private Integer platformId;
-    
+
     /// 课程类型名称,二级建造师、二级造价师
     @ApiModelProperty("项目")
     private String platformName;
-    
+
     /// 专业名称
     @ApiModelProperty("科目")
     private String majorName;
-    
+
     /// 姓名
     @ApiModelProperty("学员姓名")
     private String name;
@@ -52,61 +55,63 @@ public class ClassNpUserInfoVo implements Serializable {
     /// 姓名
     @ApiModelProperty("学员单位")
     private String companyName;
-    
+
     /// 身份证
     @ApiModelProperty("身份证")
     private String idNum;
-    
+
     /// 手机号
     @ApiModelProperty("手机号")
     private String mobile;
-    
+
     /// 是否完善必填信息,true是,false否
     private Boolean isPerfect;
-    
+
     /// 是否上报注册中心,1是 0否
     @ApiModelProperty("是否上报注册中心,1是 0否")
     private Integer reportStatu;
-    
+
     /// 学时申报,1已申报 0未申报
     @ApiModelProperty("学时申报,1已申报 0未申报")
     private Integer studyQueueStatus;
-    
+
     /// 开通方式,0线下,其他线上
     private Integer orderId;
-    
+
     /// 学习进度,已学学时
     private Integer studyHours;
-    
+
     /// 学习进度,总学时
     private Integer totalHours;
-    
+
     /// 下单时间
     @ApiModelProperty("下单时间")
     private String orderTime;
 
     /// 下单时间
     private Long orderTimeLong;
-    
+
     /// 购买时间
     @ApiModelProperty("报名时间")
     private String createTime;
 
     /// 购买时间
     private Long createTimeLong;
-    
+
     /// 上传报名时间
     @ApiModelProperty("上传报名时间")
     private String doTime;
 
     /// 上传报名时间
     private Long doTimeLong;
-    
+
     /// 开始学习时间
     @ApiModelProperty("开始学习时间")
     private String beginTime;
-    
+
     /// 完成学习时间
     @ApiModelProperty("完成学习时间")
     private String applyTime;
+
+    private Long applyTimeLong;
 }

+ 51 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/order/service/impl/OrderServiceImpl.java

@@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.core.redis.RedisLockEntity;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
@@ -252,7 +253,7 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             //订单商品
             Goods goods = iGoodsService.getOne(new LambdaQueryWrapper<Goods>().eq(Goods::getGoodsId, bo.getGoodsId()));
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getTelphone,bo.getTel()).last("limit 1"));
+                    .eq(User::getTelphone, EncryptHandler.encrypt(bo.getTel())).last("limit 1"));
             if(Validator.isNull(user)){
                 bo.setMsg("该手机号码用户不存在");
                 continue;
@@ -1795,7 +1796,44 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
     }
 
     private String createGradeCode(Long goodsId,CourseBusinessVo business) {
+
         Goods goods = iGoodsService.getById(goodsId);
+        if (StringUtils.isNotBlank(business.getAliasName()) && (business.getAliasName().equals("二级建造师") || business.getAliasName().equals("二级造价工程师"))){
+            List<Goods> goodsList = iGoodsService.list(new LambdaQueryWrapper<Goods>()
+                    .eq(Goods::getEducationTypeId, goods.getEducationTypeId())
+                    .eq(Goods::getBusinessId, goods.getBusinessId())
+                    .eq(Goods::getProjectId, goods.getProjectId())
+                    .eq(Goods::getSubjectIds, goods.getSubjectIds()));
+            if (goodsList.size() > 1){
+                //该业务层次下有多个商品
+                List<Long> goodsIds = goodsList.stream().filter(item -> !item.getGoodsId().equals(goodsId)).map(Goods::getGoodsId).collect(Collectors.toList());
+                //获取预报名班级
+                List<ClassGradeGoods> goodsGradeList = iClassGradeGoodsService.getClassGradeByIds(goodsIds);
+                if (CollectionUtils.isNotEmpty(goodsGradeList)){
+                    Map<Long, List<ClassGradeGoods>> map = goodsGradeList.stream().collect(Collectors.groupingBy(ClassGradeGoods::getGoodsId));
+                    List<ClassGradeSortBo> sortList = new ArrayList<>();
+                    map.forEach((k, v) -> {
+                        ClassGradeSortBo sortBo = new ClassGradeSortBo();
+                        sortBo.setKey(k);
+                        sortBo.setSize(v.size());
+                        sortList.add(sortBo);
+                    });
+                    ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
+                    List<ClassGradeGoods> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGradeGoods::getCreateTime)).collect(Collectors.toList());
+                    //班级信息
+                    List<ClassGrade> list = iClassGradeService.listByIds(classGradesMax.stream().map(ClassGradeGoods::getGradeId).collect(Collectors.toList()));
+                    //获取当前机构商品下的班级
+                    List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
+                    if (gradeGoods.size() < list.size()) {
+                        ClassGrade grade = list.get(gradeGoods.size());
+                        if (iClassGradeService.checkEjjjPeopleNumLimit(business.getId(),grade.getGradeId())){
+                            return grade.getOfficialName();
+                        }
+                        return ServletUtils.getEncoded("PIY");
+                    }
+                }
+            }
+        }
         List<CourseSubject> courseSubjectList = courseSubjectService.listByIds(Arrays.asList(goods.getSubjectIds().split(",")));
         List<String> subNames = courseSubjectList.stream().map(CourseSubject::getSubjectName).collect(Collectors.toList());
         List<Long> subIds = courseSubjectService.getIdsByTenant(subNames);
@@ -1813,16 +1851,24 @@ public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order> implements
             map.forEach((k, v) -> {
                 ClassGradeSortBo sortBo = new ClassGradeSortBo();
                 sortBo.setKey(k);
-                sortBo.setSize(v.size());
+                Map<String, List<ClassGrade>> collect = v.stream().collect(Collectors.groupingBy(ClassGrade::getOfficialName));
+                sortBo.setSize(collect.keySet().size());
                 sortList.add(sortBo);
             });
             ClassGradeSortBo sortBo = sortList.stream().sorted(Comparator.comparing(ClassGradeSortBo::getSize).reversed()).findFirst().orElse(null);
             List<ClassGrade> classGradesMax = map.get(sortBo.getKey()).stream().sorted(Comparator.comparing(ClassGrade::getCreateTime)).collect(Collectors.toList());
+            //去重
+            List<String> codeStrs = new ArrayList<>();
+            for (ClassGrade gradesMax : classGradesMax) {
+                if (codeStrs.contains(gradesMax.getOfficialName())){
+                    continue;
+                }
+                codeStrs.add(gradesMax.getOfficialName());
+            }
             //获取当前机构商品下的班级
             List<ClassGradeGoods> gradeGoods = iClassGradeGoodsService.getGradeGoodsList(goods.getGoodsId());
-            if (gradeGoods.size() < classGradesMax.size()) {
-                ClassGrade classGrade = classGradesMax.get(gradeGoods.size());
-                return classGrade.getOfficialName();
+            if (gradeGoods.size() < codeStrs.size()) {
+                return codeStrs.get(gradeGoods.size());
             } else {
                 //生成预报名官方编号
                 return ServletUtils.getEncoded("PIY");

+ 5 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserAppAccountLoginBo.java

@@ -24,4 +24,9 @@ public class UserAppAccountLoginBo {
     private String pwd;
     @ApiModelProperty("活动分销码")
     private String shareActivityCode;
+
+    @ApiModelProperty("手机号")
+    private String tel;
+    @ApiModelProperty("验证码")
+    private String code;
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/bo/UserBankRecordAddBo.java

@@ -120,4 +120,7 @@ public class UserBankRecordAddBo {
     /** 模拟做题试卷ID */
     @ApiModelProperty("模拟做题试卷ID")
     private Long simulateExamId;
+    /** 做题模式 1章卷 2随机练习 */
+    @ApiModelProperty("做题模式 1章卷 2随机练习 3模拟随机")
+    private Long doMode;
 }

+ 9 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/mapper/UserMapper.java

@@ -55,4 +55,13 @@ public interface UserMapper extends BaseMapper<User> {
 
     @InterceptorIgnore(tenantLine = "true")
     User queryUserByIdNumTenant(@Param("idNum") String idNum,@Param("tenantId")  Long tenantId);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<User> getUserByIdNumNotTenant(@Param("idNum")String idNum);
+
+    @InterceptorIgnore(tenantLine = "true")
+    List<User> selectAllUserList();
+
+    @InterceptorIgnore(tenantLine = "true")
+    void editUserInfo(UserQueryBo bo);
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/IUserService.java

@@ -123,4 +123,8 @@ public interface IUserService extends IService<User> {
 
     List<User> getUserByTelNotTenant(String telphone);
 
+	List<User> getUserByIdNumNotTenant(String idNum);
+
+	void batchUpdateTelId();
+
 }

+ 3 - 2
zhongzheng-system/src/main/java/com/zhongzheng/modules/user/service/impl/UserSubscribeServiceImpl.java

@@ -16,6 +16,7 @@ import com.zhongzheng.common.annotation.DataScope;
 import com.zhongzheng.common.core.domain.AjaxResult;
 import com.zhongzheng.common.core.redis.RedisCache;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.type.EncryptHandler;
 import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.common.utils.ServletUtils;
 import com.zhongzheng.common.utils.ToolsUtils;
@@ -177,7 +178,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
     public List<UserSubscribeIdsImport> importIdsDataFilter(List<UserSubscribeIdsImport> list) {
         for(UserSubscribeIdsImport info : list){
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getIdCard,info.getIdCard()).last("limit 1"));
+                    .eq(User::getIdCard,EncryptHandler.encrypt(info.getIdCard())).last("limit 1"));
             if(Validator.isEmpty(user)){
                 throw new CustomException("学员:"+info.getIdCard()+"不存在没有符合导出的数据,,请先处理再继续操作");
             }
@@ -189,7 +190,7 @@ public class UserSubscribeServiceImpl extends ServiceImpl<UserSubscribeMapper, U
     public List<UserSubscribeIdsImport> checkIdsDataFilter(UserSubscribeIdsImportCheck bo) {
         for(UserSubscribeIdsImport info : bo.getList()){
             User user = iUserService.getOne(new LambdaQueryWrapper<User>()
-                    .eq(User::getIdCard,info.getIdCard()).last("limit 1"));
+                    .eq(User::getIdCard, EncryptHandler.encrypt(info.getIdCard())).last("limit 1"));
             if(Validator.isEmpty(user)){
                 throw new CustomException("学员:"+info.getIdCard()+"不存在,请先处理再继续操作");
             }

+ 10 - 0
zhongzheng-system/src/main/resources/mapper/modules/course/CourseSubjectMapper.xml

@@ -153,4 +153,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             </foreach>
         </if>
     </select>
+
+    <select id="getListByIDs" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.course.domain.CourseSubject">
+        select * from course_subject where `status` = 1
+        <if test="ids != null and ids.size()!=0 ">
+            AND id in
+            <foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/exam/ExamArrangementStudentMapper.xml

@@ -143,7 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             and e.exam_period like concat('%',#{examPeriod},'%')
         </if>
         <if test="idCard != null and idCard != ''">
-            AND u.id_card like concat('%',#{idCard},'%')
+            AND u.id_card like concat('%',#{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler},'%')
         </if>
         <if test="realname != null and realname != ''">
             AND u.realname like concat('%',#{realname},'%')

+ 11 - 1
zhongzheng-system/src/main/resources/mapper/modules/goods/GoodsAttachedMapper.xml

@@ -39,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<result property="paperName" column="paper_name"/>
 		<result property="externalLink" column="external_link"/>
 		<result property="externalLinkStatus" column="external_link_status"/>
+		<result property="simulateStatus" column="simulate_status"/>
     </resultMap>
 
     <select id="getList" parameterType="com.zhongzheng.modules.goods.bo.GoodsAttachedQueryBo" resultMap="GoodsAttachedResultVo">
@@ -55,6 +56,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			WHEN ga.type = 3 THEN
 			e.do_type
 			END do_type,
+			CASE
+
+			WHEN ga.type = 1 THEN
+			-1
+			WHEN ga.type = 2 THEN
+			-1
+			WHEN ga.type = 3 THEN
+			e.simulate_status
+			END simulate_status,
 			CASE
 
 				WHEN ga.type = 1 THEN
@@ -357,7 +367,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		WHERE
 			ga.goods_id = #{goodsId} AND ga.type = 3
 	</select>
-	
+
 	<delete id="deleteByIdTenant" parameterType="map">
 		delete from goods_attached where goods_id = #{newGoodsId} and tenant_id = #{newTenantId}
 	</delete>

+ 11 - 0
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeGoodsMapper.xml

@@ -15,4 +15,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT cgg.* FROM class_grade_goods cgg INNER JOIN class_grade cg ON cgg.grade_id = cg.grade_id WHERE cgg.goods_id = #{goodsId} AND cg.`status` = 1
     </select>
 
+    <select id="getClassGradeByIds" parameterType="java.lang.Long" resultType="com.zhongzheng.modules.grade.domain.ClassGradeGoods">
+        SELECT cgg.* FROM class_grade_goods cgg INNER JOIN class_grade cg ON cgg.grade_id = cg.grade_id
+        WHERE cg.`status` = 1 AND cg.class_status = 0
+        <if test="goodsIds != null and goodsIds.size()!=0 ">
+            AND cgg.goods_id in
+            <foreach collection="goodsIds" item="item" index="index" open="(" close=")" separator=",">
+                #{item}
+            </foreach>
+        </if>
+    </select>
+
 </mapper>

+ 30 - 9
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeMapper.xml

@@ -186,6 +186,26 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <collection property="gradeList" column="goods_id" select="findGradeList"/>
     </resultMap>
 
+    <resultMap type="com.zhongzheng.modules.grade.vo.ClassNpUserInfoVo" id="ClassNpUserInfoVoResult">
+        <result property="gradeId" column="grade_id"/>
+        <result property="tenantId" column="tenantId"/>
+        <result property="classNo" column="classNo"/>
+        <result property="platformName" column="platformName"/>
+        <result property="categoryName" column="categoryName"/>
+        <result property="name" column="name"/>
+        <result property="idNum" column="idNum" typeHandler="com.zhongzheng.common.type.EncryptHandler"/>
+        <result property="mobile" column="mobile" typeHandler="com.zhongzheng.common.type.EncryptHandler"/>
+        <result property="companyName" column="companyName"/>
+        <result property="orderTimeLong" column="orderTimeLong"/>
+        <result property="createTimeLong" column="createTimeLong"/>
+        <result property="doTimeLong" column="doTimeLong"/>
+        <result property="reportStatu" column="reportStatu"/>
+        <result property="studyQueueStatus" column="studyQueueStatus"/>
+        <result property="applyTimeLong" column="applyTimeLong"/>
+        <result property="userId" column="user_id"/>
+        <result property="subjectIds" column="subject_ids"/>
+    </resultMap>
+
     <select id="findGradeList" resultMap="ClassGradeVoResult">
         SELECT
             g.*,
@@ -458,7 +478,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND u.realname like concat('%', #{realname}, '%')
         </if>
         <if test="telphone != null and telphone != ''">
-            AND u.telphone like concat('%', #{telphone}, '%')
+            AND (u.telphone like concat('%', #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%'))
         </if>
         <if test="companyName != null and companyName != ''">
             AND u.company_name like concat('%', #{companyName}, '%')
@@ -903,7 +923,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             ( SELECT COUNT( user_id ) AS num FROM class_grade_user WHERE grade_id = #{gradeId} AND `status` = 1 AND change_grade = 0 GROUP BY user_id ) a
     </select>
 
-    <select id="getGradeDetailByTenant" parameterType="com.zhongzheng.modules.grade.bo.ClassNpUserInfoBo" resultType="com.zhongzheng.modules.grade.vo.ClassNpUserInfoVo">
+    <select id="getGradeDetailByTenant" parameterType="com.zhongzheng.modules.grade.bo.ClassNpUserInfoBo" resultMap="ClassNpUserInfoVoResult" >
         SELECT
             CONCAT('',cg.tenant_id) as tenantId,
             cg.official_name as classNo,
@@ -918,15 +938,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             cgu.official_status_time as doTimeLong,
             cgu.official_status as reportStatu,
             cgu.period_plush as studyQueueStatus,
+            cgu.period_wait_time as applyTimeLong,
             u.user_id,
             cg.grade_id,
             g.subject_ids
         FROM class_grade cg
-                 LEFT JOIN class_grade_user cgu ON cg.grade_id = cgu.grade_id
+                 INNER JOIN  class_grade_user cgu ON cg.grade_id = cgu.grade_id
                 <if test="tenantId != null">
                     AND cgu.tenant_id = #{tenantId}
                 </if>
-                 LEFT JOIN class_grade_goods cgg ON cg.grade_id = cgg.grade_id
+                 INNER JOIN class_grade_goods cgg ON cg.grade_id = cgg.grade_id
                 <if test="tenantId != null">
                     AND cgg.tenant_id = #{tenantId}
                 </if>
@@ -953,10 +974,10 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND u.realname like concat('%', #{name}, '%')
         </if>
         <if test="idNum != null and idNum !=''">
-            AND u.id_card like concat('%', #{idNum}, '%')
+            AND u.id_card like concat('%', #{idNum,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
         </if>
         <if test="mobile != null and mobile !=''">
-            AND u.telphone like concat('%', #{mobile}, '%')
+            AND u.telphone like concat('%', #{mobile,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
         </if>
     </select>
 
@@ -969,7 +990,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             LEFT JOIN goods g ON cgg.goods_id = g.goods_id
             LEFT JOIN course_business cb ON g.business_id = cb.id
         WHERE
-            cb.alias_name = #{aliasName} AND cg.class_status = 0 AND cg.`status` = 1
+            cb.alias_name = #{aliasName} AND cg.class_status = 0 AND cg.`status` = 1 AND g.goods_status = 1 AND cb.`status` = 1
         <if test="subIds != null and subIds.size()!=0 ">
             AND (
             <foreach collection="subIds" item="id" index="index">
@@ -1019,7 +1040,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             *
         FROM
             class_grade
-        where register_code = #{registerCode}
+        where official_name = #{registerCode}
     </select>
 
     <update id="UpGradeStatusByTenant" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeOpenUpBo" >
@@ -1035,7 +1056,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     <update id="UpGradeCodeByIdTenant" parameterType="java.lang.Long" >
         update class_grade set register_code = official_name where 1 = 1
-        <if test="gradeIds != null and gradeIds.size()!=0 ">
+        <if test="ids != null and ids.size()!=0 ">
             AND grade_id in
             <foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
                 #{item}

+ 1 - 1
zhongzheng-system/src/main/resources/mapper/modules/grade/ClassGradeUserMapper.xml

@@ -1179,7 +1179,7 @@
         FROM
             `user`
         WHERE
-            id_card = #{idCard} and user_id != #{userId} and `status` = 1
+            id_card = #{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler} and user_id != #{userId} and `status` = 1
     </select>
 
     <select id="selectUserCertificate" parameterType="com.zhongzheng.modules.grade.bo.ClassGradeUserQueryBo"

+ 31 - 0
zhongzheng-system/src/main/resources/mapper/modules/user/UserExamWrongRecordMapper.xml

@@ -114,6 +114,37 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         </if>
         GROUP BY
         e.exam_id
+        UNION ALL
+        SELECT
+        e.exam_name,
+        e.exam_id,
+        COUNT( DISTINCT uew.question_id ) AS wrong_question_num,
+        3 AS do_mode
+        FROM
+        user_exam_wrong_record uew
+        LEFT JOIN exam e ON uew.exam_id = e.exam_id
+        LEFT JOIN exam_paper ep ON ep.paper_id = e.exam_paper_id
+        LEFT JOIN goods g ON g.goods_id = uew.goods_id
+        WHERE
+        uew.user_id = #{userId}
+        AND uew.do_mode = 3
+        <if test="goodsId != null and goodsId != ''">
+            AND uew.goods_id = #{goodsId}
+        </if>
+        <if test="orderGoodsId != null and orderGoodsId != ''">
+            AND uew.order_goods_id = #{orderGoodsId}
+        </if>
+        <if test="paperId != null and paperId != ''">
+            AND e.exam_paper_id = #{paperId}
+        </if>
+        <if test="educationTypeId != null and educationTypeId != ''">
+            AND g.education_type_id = #{educationTypeId}
+        </if>
+        <if test="businessId != null and businessId != ''">
+            AND g.business_id = #{businessId}
+        </if>
+        GROUP BY
+        e.exam_id
     </select>
 
     <select id="selectQuestionList" parameterType="com.zhongzheng.modules.user.bo.UserExamWrongRecordQueryBo" resultMap="UserExamWrongRecordVoResult">

+ 40 - 10
zhongzheng-system/src/main/resources/mapper/modules/user/UserMapper.xml

@@ -202,16 +202,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND u.create_time &lt; #{endTime}
         </if>
         <if test="userKerWord != null and userKerWord != ''" >
-            AND (u.realname like concat('%', #{userKerWord}, '%') OR u.telphone like concat('%', #{userKerWord}, '%') OR u.id_card like concat('%', #{userKerWord}, '%'))
+            AND (u.realname like concat('%', #{userKerWord}, '%') OR u.telphone like concat('%', #{userKerWord,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%') OR u.id_card like concat('%', #{userKerWord,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%'))
         </if>
         <if test="nickname != null and nickname != ''" >
             AND u.nickname like concat('%', #{nickname}, '%')
         </if>
         <if test="telphone != null and telphone != ''" >
-            AND u.telphone like concat('%', #{telphone}, '%')
+            AND u.telphone like concat('%', #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
         </if>
         <if test="idCard != null and idCard != ''" >
-            AND u.id_card like concat('%', #{idCard}, '%')
+            AND u.id_card like concat('%', #{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
         </if>
         <if test="realname != null and realname != ''" >
             AND u.realname like concat('%', #{realname}, '%')
@@ -259,19 +259,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             AND (SELECT COUNT(u.user_id) FROM class_grade_user cgu where 1=1 AND u.status in (1) and cgu.user_id= u.user_id) = 0
         </if>
         <if test="searchKey != null and searchKey != '' and searchType == 0 ">
-            and (u.realname like concat('%', #{searchKey}, '%') or u.id_card like concat('%', #{searchKey}, '%'))
+            and (u.realname like concat('%', #{searchKey}, '%') or u.id_card like concat('%', #{searchKey,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%'))
         </if>
         <if test="idCards != null and idCards.size()!=0 and searchType == 0" >
             AND u.id_card in
             <foreach collection="idCards" item="item" index="index" open="(" close=")" separator=",">
-                #{item}
+                #{item,typeHandler=com.zhongzheng.common.type.EncryptHandler}
             </foreach>
         </if>
         <if test="searchType == 1" >
-            and (u.realname like concat('%', #{searchKey}, '%') or u.id_card like concat('%', #{searchKey}, '%') or
+            and (u.realname like concat('%', #{searchKey}, '%') or u.id_card like concat('%', #{searchKey,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%') or
             u.id_card in
             <foreach collection="idCards" item="item" index="index" open="(" close=")" separator=",">
-                #{item}
+                #{item,typeHandler=com.zhongzheng.common.type.EncryptHandler}
             </foreach>)
         </if>
         <if test="hasBindWx != null and hasBindWx == 1 ">
@@ -424,7 +424,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM
             `user`
         WHERE
-            telphone = #{telphone}
+            telphone = #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler}
           AND status = 1 AND tenant_id = #{tenantId}
     </select>
 
@@ -434,7 +434,16 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM
             `user`
         WHERE
-            telphone = #{telphone} AND status = 1
+            telphone = #{telphone,typeHandler=com.zhongzheng.common.type.EncryptHandler} AND status = 1
+    </select>
+
+    <select id="getUserByIdNumNotTenant" parameterType="java.lang.String" resultType="com.zhongzheng.modules.user.domain.User">
+        SELECT
+            *
+        FROM
+            `user`
+        WHERE
+            id_card = #{idNum,typeHandler=com.zhongzheng.common.type.EncryptHandler} AND status = 1
     </select>
 
     <select id="queryUserByIdNumTenant" parameterType="map" resultMap="UserResult">
@@ -443,8 +452,29 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         FROM
             `user`
         WHERE
-            id_card = #{idNum}
+            id_card = #{idNum,typeHandler=com.zhongzheng.common.type.EncryptHandler}
           AND status = 1 AND tenant_id = #{tenantId}
     </select>
 
+    <select id="selectAllUserList" parameterType="com.zhongzheng.modules.user.bo.UserQueryBo" resultMap="UserResult">
+        SELECT
+            *
+        FROM
+            `user`
+    </select>
+
+    <select id="editUserInfo" parameterType="com.zhongzheng.modules.user.bo.UserQueryBo">
+        UPDATE `user`
+        <trim prefix="set" suffixOverrides=",">
+            <if test="telphone != null">
+                telphone = #{telphone},
+            </if>
+            <if test="idCard != null">
+                id_card = #{idCard},
+            </if>
+        </trim>
+        WHERE
+            user_id = #{userId}
+    </select>
+
 </mapper>

+ 2 - 2
zhongzheng-system/src/main/resources/mapper/modules/user/UserStudyRecordMapper.xml

@@ -1461,10 +1461,10 @@
             AND u.realname like concat('%', #{userName}, '%')
         </if>
         <if test="idCard != null and idCard !='' ">
-            AND u.id_card like concat('%', #{idCard}, '%')
+            AND u.id_card like concat('%', #{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
         </if>
         <if test="phone != null and phone !='' ">
-            AND u.telphone like concat('%', #{phone}, '%')
+            AND u.telphone like concat('%', #{phone,typeHandler=com.zhongzheng.common.type.EncryptHandler}, '%')
         </if>
         <if test="purchaseStatus != null and purchaseStatus !='' ">
             AND ur.buy_course = #{purchaseStatus}

+ 3 - 3
zhongzheng-system/src/main/resources/mapper/modules/user/UserSubscribeMapper.xml

@@ -178,14 +178,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <if test="idCards != null and idCards.size()!=0 and searchType == 0" >
             AND u.id_card in
             <foreach collection="idCards" item="item" index="index" open="(" close=")" separator=",">
-                #{item}
+                #{item,typeHandler=com.zhongzheng.common.type.EncryptHandler}
             </foreach>
         </if>
         <if test="searchType == 1" >
             and (u.realname like concat('%', #{searchKey}, '%') or u.id_card like concat('%', #{searchKey}, '%') or
             u.id_card in
             <foreach collection="idCards" item="item" index="index" open="(" close=")" separator=",">
-                #{item}
+                #{item,typeHandler=com.zhongzheng.common.type.EncryptHandler}
             </foreach>)
         </if>
         <if test="userId != null and userId != '' ">
@@ -262,7 +262,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
     </select>
 
     <select id="selectUserId" parameterType="map"  resultType="Long">
-        SELECT u.user_id FROM `user` u where u.realname=#{userName} and u.id_card=#{idCard}
+        SELECT u.user_id FROM `user` u where u.realname=#{userName} and u.id_card=#{idCard,typeHandler=com.zhongzheng.common.type.EncryptHandler}
     </select>
 
     <select id="selectBeforeId" parameterType="map"  resultType="Long">