Procházet zdrojové kódy

完善课程学生关联

honorfire před 7 měsíci
rodič
revize
1355ee1b0e

+ 66 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseStudentRelateController.java

@@ -17,6 +17,7 @@ import cn.dev33.satoken.stp.StpUtil;
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.convert.Convert;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.json.JSONObject;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -31,8 +32,10 @@ import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
 import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.handler.CommonSm4CbcTypeHandler;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.common.util.CommonCryptogramUtil;
 import vip.xiaonuo.disk.domain.CourseStudentRelate;
 import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
 import vip.xiaonuo.disk.param.coursestudentrelate.CourseStudentRelateAddParam;
@@ -47,6 +50,8 @@ import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.constraints.NotEmpty;
 import java.io.IOException;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -64,6 +69,8 @@ public class CourseStudentRelateController {
 
     @Resource
     private CourseStudentRelateService courseStudentRelateService;
+    @Resource
+    private CommonCryptogramUtil commonCryptogramUtil;
 
     /**
      * 获取课程学生关联表分页
@@ -92,6 +99,22 @@ public class CourseStudentRelateController {
                 .collect(Collectors.toList());
         for(Map oneUser : list)
         {
+            //处理手机号和身份证号
+            String phone="";
+            String idCardNumber="";
+            String birth="";
+            if(ObjectUtil.isNotEmpty(oneUser.get("phone"))){
+                phone= String.valueOf(oneUser.get("phone"));
+                phone=commonCryptogramUtil.doSm4CbcDecrypt(phone);
+            }
+            if(ObjectUtil.isNotEmpty(oneUser.get("idCardNumber"))){
+                idCardNumber=String.valueOf(oneUser.get("idCardNumber"));
+                idCardNumber=commonCryptogramUtil.doSm4CbcDecrypt(idCardNumber);
+                birth=extractBirthday(idCardNumber);
+            }
+            oneUser.put("phone",phone);
+            oneUser.put("birth",birth);
+            //处理在线状态
             if(userIdList.contains(oneUser.get("userId")))
             {
                 oneUser.put("isLogin","1");
@@ -102,6 +125,8 @@ public class CourseStudentRelateController {
                 oneUser.put("isLoginName","离线");
             }
         }
+
+
         return CommonResult.data(page);
     }
 
@@ -194,6 +219,21 @@ public class CourseStudentRelateController {
         Map param =new HashMap();
         param.put("id", req.getParameter("id"));
         Map<String,Object> oneUser=courseStudentRelateService.queryInfo(param);
+        String phone="";
+        String idCardNumber="";
+        String birth="";
+        if(ObjectUtil.isNotEmpty(oneUser.get("phone"))){
+            phone= String.valueOf(oneUser.get("phone"));
+            phone=commonCryptogramUtil.doSm4CbcDecrypt(phone);
+        }
+        if(ObjectUtil.isNotEmpty(oneUser.get("idCardNumber"))){
+            idCardNumber=String.valueOf(oneUser.get("idCardNumber"));
+            idCardNumber=commonCryptogramUtil.doSm4CbcDecrypt(idCardNumber);
+            birth=extractBirthday(idCardNumber);
+        }
+        oneUser.put("phone",phone);
+        oneUser.put("birth",birth);
+
         List<String> userIdList = StpUtil.searchSessionId("", 0, Integer.MAX_VALUE, true)
                 .stream()
                 .map(sessionId -> StrUtil.split(sessionId, StrUtil.COLON).get(3))
@@ -238,6 +278,32 @@ public class CourseStudentRelateController {
         courseStudentRelateService.downloadImportTemplate(response);
     }
 
+    /**
+     * 从身份证号提取生日(支持15/18位)
+     * @param idCard 身份证号码
+     * @return 格式为"yyyy年MM月dd日"的生日字符串,无效身份证返回null
+     */
+    public String extractBirthday(String idCard) {
+        return Optional.ofNullable(idCard)
+                .map(String::trim)  // 去除首尾空格
+                .filter(id -> id.matches("^[1-9]\\d{5}(19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])\\d{3}[\\dXx]$"))
+                .map(id -> {
+                    String birthPart = id.substring(6, 14);  // 直接取18位的年月日
+                    try {
+                        LocalDate birthDate = LocalDate.parse(
+                                birthPart,
+                                DateTimeFormatter.ofPattern("yyyyMMdd")  // 明确指定格式
+                        );
+                        return birthDate.format(
+                                DateTimeFormatter.ofPattern("yyyy年MM月dd日")
+                        );
+                    } catch (Exception e) {
+                        return null;
+                    }
+                })
+                .orElse(null);
+    }
+
 
 
 }

+ 3 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseStudentRelateMapper.xml

@@ -45,9 +45,12 @@
             IFNULL (su.USER_STATUS,'') AS userStatus,
             IFNULL(( SELECT dd1.DICT_LABEL FROM (SELECT d1.DICT_LABEL,d1.DICT_VALUE  FROM  DEV_DICT d1 WHERE PARENT_ID = (SELECT d2.ID  FROM  DEV_DICT d2 WHERE d2.DICT_VALUE='COMMON_STATUS') )dd1 WHERE dd1.DICT_VALUE = TRIM(su.USER_STATUS) ),'') AS userStatusName,
             IFNULL (su.PHONE,'') AS phone,
+            IFNULL (su.ID_CARD_NUMBER,'') AS idCardNumber,
+            IFNULL (so.NAME,'') AS orgIdName,
             IFNULL (su.LATEST_LOGIN_TIME,'') AS latestLoginTime
         FROM COURSE_STUDENT_RELATE csr
         LEFT JOIN SYS_USER su ON csr.USER_ID =su.ID
+        LEFT JOIN SYS_ORG so  ON so.ID =su.ORG_ID  AND so.DELETE_FLAG ='NOT_DELETE'
         WHERE csr.DELETE_FLAG ='NOT_DELETE'
         <if test="id !=null and id != ''">
             and csr.ID=#{id}