|
@@ -17,6 +17,7 @@ import cn.dev33.satoken.stp.StpUtil;
|
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
import cn.hutool.core.bean.BeanUtil;
|
|
|
import cn.hutool.core.collection.CollStreamUtil;
|
|
import cn.hutool.core.collection.CollStreamUtil;
|
|
|
import cn.hutool.core.convert.Convert;
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import cn.hutool.json.JSONObject;
|
|
import cn.hutool.json.JSONObject;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
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.bind.annotation.*;
|
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
import org.springframework.web.multipart.MultipartFile;
|
|
|
import vip.xiaonuo.common.annotation.CommonLog;
|
|
import vip.xiaonuo.common.annotation.CommonLog;
|
|
|
|
|
+import vip.xiaonuo.common.handler.CommonSm4CbcTypeHandler;
|
|
|
import vip.xiaonuo.common.pojo.CommonResult;
|
|
import vip.xiaonuo.common.pojo.CommonResult;
|
|
|
import vip.xiaonuo.common.pojo.CommonValidList;
|
|
import vip.xiaonuo.common.pojo.CommonValidList;
|
|
|
|
|
+import vip.xiaonuo.common.util.CommonCryptogramUtil;
|
|
|
import vip.xiaonuo.disk.domain.CourseStudentRelate;
|
|
import vip.xiaonuo.disk.domain.CourseStudentRelate;
|
|
|
import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
|
|
import vip.xiaonuo.disk.domain.ResourceRecordUserRelate;
|
|
|
import vip.xiaonuo.disk.param.coursestudentrelate.CourseStudentRelateAddParam;
|
|
import vip.xiaonuo.disk.param.coursestudentrelate.CourseStudentRelateAddParam;
|
|
@@ -47,6 +50,8 @@ import javax.servlet.http.HttpServletResponse;
|
|
|
import javax.validation.Valid;
|
|
import javax.validation.Valid;
|
|
|
import javax.validation.constraints.NotEmpty;
|
|
import javax.validation.constraints.NotEmpty;
|
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
|
|
|
+import java.time.LocalDate;
|
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
@@ -64,6 +69,8 @@ public class CourseStudentRelateController {
|
|
|
|
|
|
|
|
@Resource
|
|
@Resource
|
|
|
private CourseStudentRelateService courseStudentRelateService;
|
|
private CourseStudentRelateService courseStudentRelateService;
|
|
|
|
|
+ @Resource
|
|
|
|
|
+ private CommonCryptogramUtil commonCryptogramUtil;
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 获取课程学生关联表分页
|
|
* 获取课程学生关联表分页
|
|
@@ -92,6 +99,22 @@ public class CourseStudentRelateController {
|
|
|
.collect(Collectors.toList());
|
|
.collect(Collectors.toList());
|
|
|
for(Map oneUser : list)
|
|
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")))
|
|
if(userIdList.contains(oneUser.get("userId")))
|
|
|
{
|
|
{
|
|
|
oneUser.put("isLogin","1");
|
|
oneUser.put("isLogin","1");
|
|
@@ -102,6 +125,8 @@ public class CourseStudentRelateController {
|
|
|
oneUser.put("isLoginName","离线");
|
|
oneUser.put("isLoginName","离线");
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
return CommonResult.data(page);
|
|
return CommonResult.data(page);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -194,6 +219,21 @@ public class CourseStudentRelateController {
|
|
|
Map param =new HashMap();
|
|
Map param =new HashMap();
|
|
|
param.put("id", req.getParameter("id"));
|
|
param.put("id", req.getParameter("id"));
|
|
|
Map<String,Object> oneUser=courseStudentRelateService.queryInfo(param);
|
|
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)
|
|
List<String> userIdList = StpUtil.searchSessionId("", 0, Integer.MAX_VALUE, true)
|
|
|
.stream()
|
|
.stream()
|
|
|
.map(sessionId -> StrUtil.split(sessionId, StrUtil.COLON).get(3))
|
|
.map(sessionId -> StrUtil.split(sessionId, StrUtil.COLON).get(3))
|
|
@@ -238,6 +278,32 @@ public class CourseStudentRelateController {
|
|
|
courseStudentRelateService.downloadImportTemplate(response);
|
|
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);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
}
|