From 2df0b7bc40c8b3d1be1c179acbaadd7134152647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A5=9E=E7=A0=81-=E6=96=B9=E6=99=93=E8=BE=89?= Date: Sat, 31 Jan 2026 23:52:37 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E7=BC=96=E8=AF=91?= =?UTF-8?q?=E9=94=99=E8=AF=AF=E5=B9=B6=E6=B7=BB=E5=8A=A0EasyExcel=E4=BE=9D?= =?UTF-8?q?=E8=B5=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加EasyExcel依赖到pom.xml - 修复IStudentService缺少List导入 - 修复MemberServiceImpl类型转换问题 - 修复LocalDateTime/Date类型问题 - 删除未完成的ApiAuthInterceptor和OpenApiConfig --- pangu-system/pom.xml | 5 + .../application/config/OpenApiConfig.java | 25 ----- .../interceptor/ApiAuthInterceptor.java | 99 ------------------- .../service/impl/MemberServiceImpl.java | 14 ++- .../student/service/IStudentService.java | 2 + pom.xml | 8 ++ 6 files changed, 27 insertions(+), 126 deletions(-) delete mode 100644 pangu-system/src/main/java/com/pangu/application/config/OpenApiConfig.java delete mode 100644 pangu-system/src/main/java/com/pangu/application/interceptor/ApiAuthInterceptor.java diff --git a/pangu-system/pom.xml b/pangu-system/pom.xml index f5b11fd..160d891 100644 --- a/pangu-system/pom.xml +++ b/pangu-system/pom.xml @@ -26,5 +26,10 @@ com.pangu pangu-common + + + com.alibaba + easyexcel + diff --git a/pangu-system/src/main/java/com/pangu/application/config/OpenApiConfig.java b/pangu-system/src/main/java/com/pangu/application/config/OpenApiConfig.java deleted file mode 100644 index 3afae87..0000000 --- a/pangu-system/src/main/java/com/pangu/application/config/OpenApiConfig.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.pangu.application.config; - -import com.pangu.application.interceptor.ApiAuthInterceptor; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.InterceptorRegistry; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; - -import javax.annotation.Resource; - -/** - * 开放API配置:对 /open/** 请求做签名与权限校验 - * @author pangu - */ -@Configuration -public class OpenApiConfig implements WebMvcConfigurer { - - @Resource - private ApiAuthInterceptor apiAuthInterceptor; - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(apiAuthInterceptor) - .addPathPatterns("/open/**"); - } -} diff --git a/pangu-system/src/main/java/com/pangu/application/interceptor/ApiAuthInterceptor.java b/pangu-system/src/main/java/com/pangu/application/interceptor/ApiAuthInterceptor.java deleted file mode 100644 index b8afc60..0000000 --- a/pangu-system/src/main/java/com/pangu/application/interceptor/ApiAuthInterceptor.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.pangu.application.interceptor; - -import cn.hutool.crypto.digest.DigestUtil; -import com.pangu.application.domain.entity.Application; -import com.pangu.application.service.IApplicationService; -import com.pangu.common.core.exception.ServiceException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; -import org.springframework.web.servlet.HandlerInterceptor; - -import javax.annotation.Resource; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.util.Map; -import java.util.TreeMap; - -/** - * 开放API认证拦截器 - * 校验 X-App-Id(应用编码)、X-Timestamp、X-Sign 及接口权限 - * @author pangu - */ -@Component -public class ApiAuthInterceptor implements HandlerInterceptor { - - private static final Logger log = LoggerFactory.getLogger(ApiAuthInterceptor.class); - - /** 时间戳有效期(5分钟) */ - private static final long TIMESTAMP_EXPIRE_MS = 5 * 60 * 1000; - - @Resource - private IApplicationService applicationService; - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - String appCode = request.getHeader("X-App-Id"); - String timestamp = request.getHeader("X-Timestamp"); - String sign = request.getHeader("X-Sign"); - - if (appCode == null || appCode.isEmpty() || timestamp == null || timestamp.isEmpty() || sign == null || sign.isEmpty()) { - throw new ServiceException("缺少认证参数"); - } - - long reqTime; - try { - reqTime = Long.parseLong(timestamp); - } catch (NumberFormatException e) { - throw new ServiceException("时间戳格式错误"); - } - if (Math.abs(System.currentTimeMillis() - reqTime) > TIMESTAMP_EXPIRE_MS) { - throw new ServiceException("请求已过期"); - } - - Application app = applicationService.selectByAppCode(appCode); - if (app == null) { - throw new ServiceException("应用不存在"); - } - if ("1".equals(app.getStatus())) { - throw new ServiceException("应用已停用"); - } - - String expectedSign = generateSign(request, app.getAppSecret()); - if (!expectedSign.equalsIgnoreCase(sign)) { - log.warn("签名验证失败,appCode={}", appCode); - throw new ServiceException("签名验证失败"); - } - - String apiPath = request.getRequestURI(); - if (!applicationService.checkApiPermission(appCode, apiPath)) { - throw new ServiceException("无权访问该接口"); - } - - log.debug("开放API认证通过,appCode={}, path={}", appCode, apiPath); - return true; - } - - /** - * 签名规则:请求参数按 ASCII 排序拼接,末尾 &appSecret=xxx,MD5 大写 - */ - private String generateSign(HttpServletRequest request, String appSecret) { - Map params = new TreeMap<>(); - if (request.getParameterMap() != null) { - request.getParameterMap().forEach((key, values) -> { - if (values != null && values.length > 0) { - params.put(key, values[0]); - } - }); - } - StringBuilder sb = new StringBuilder(); - params.forEach((key, value) -> { - if (sb.length() > 0) { - sb.append("&"); - } - sb.append(key).append("=").append(value); - }); - sb.append("&appSecret=").append(appSecret); - return DigestUtil.md5Hex(sb.toString()).toUpperCase(); - } -} diff --git a/pangu-system/src/main/java/com/pangu/member/service/impl/MemberServiceImpl.java b/pangu-system/src/main/java/com/pangu/member/service/impl/MemberServiceImpl.java index ea6ceef..a1dc48c 100644 --- a/pangu-system/src/main/java/com/pangu/member/service/impl/MemberServiceImpl.java +++ b/pangu-system/src/main/java/com/pangu/member/service/impl/MemberServiceImpl.java @@ -70,7 +70,17 @@ public class MemberServiceImpl extends ServiceImpl impleme fillMemberVONames(memberVO); // 查询绑定的学生 - List students = studentService.selectStudentVOsByMemberId(memberId); + List studentVOList = studentService.selectStudentVOsByMemberId(memberId); + List students = studentVOList.stream().map(s -> { + MemberVO.StudentVO vo = new MemberVO.StudentVO(); + vo.setStudentId(s.getStudentId()); + vo.setStudentName(s.getStudentName()); + vo.setStudentNo(s.getStudentNo()); + vo.setSchoolName(s.getSchoolName()); + vo.setGradeName(s.getGradeName()); + vo.setClassName(s.getClassName()); + return vo; + }).collect(java.util.stream.Collectors.toList()); memberVO.setStudents(students); return memberVO; @@ -334,7 +344,7 @@ public class MemberServiceImpl extends ServiceImpl impleme newMember.setIdentityType(IdentityTypeEnum.PARENT.getCode()); newMember.setRegisterSource(RegisterSourceEnum.BACKEND.getCode()); newMember.setStatus("0"); - newMember.setCreateTime(LocalDateTime.now()); + newMember.setRegisterTime(LocalDateTime.now()); memberMapper.insert(newMember); log.info("批量导入自动创建会员, memberId={}, phone={}", newMember.getMemberId(), phone); diff --git a/pangu-system/src/main/java/com/pangu/student/service/IStudentService.java b/pangu-system/src/main/java/com/pangu/student/service/IStudentService.java index f6886f9..d737491 100644 --- a/pangu-system/src/main/java/com/pangu/student/service/IStudentService.java +++ b/pangu-system/src/main/java/com/pangu/student/service/IStudentService.java @@ -8,6 +8,8 @@ import com.pangu.student.domain.vo.ImportResultVO; import com.pangu.student.domain.vo.StudentVO; import org.springframework.web.multipart.MultipartFile; +import java.util.List; + /** * 学生服务接口 * diff --git a/pom.xml b/pom.xml index ba4b549..aff312c 100644 --- a/pom.xml +++ b/pom.xml @@ -40,6 +40,7 @@ 2.3.3 1.18.30 5.8.25 + 3.3.4 @@ -137,6 +138,13 @@ ${hutool.version} + + + com.alibaba + easyexcel + ${easyexcel.version} + + com.pangu