From 2f05b4e14515e0a7dd7e76e8bf0e40ec1d8ef8e2 Mon Sep 17 00:00:00 2001
From: “mitao” <“2763622819@qq.com”>
Date: 星期五, 27 三月 2026 19:13:20 +0800
Subject: [PATCH] fix:会员列表
---
tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java | 50 +++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 49 insertions(+), 1 deletions(-)
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
index ca5a3c6..3047c29 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java
@@ -10,6 +10,7 @@
import com.tcm.training.admin.live.entity.Clinic;
import com.tcm.training.admin.member.entity.AppUser;
import com.tcm.training.admin.live.mapper.ClinicMapper;
+import com.tcm.training.admin.member.excel.MemberUserExcelRow;
import com.tcm.training.admin.member.dto.UserResetPasswordRequest;
import com.tcm.training.admin.member.dto.UserStatusRequest;
import com.tcm.training.admin.member.dto.UserUpdateRequest;
@@ -41,6 +42,9 @@
private static final Pattern PASSWORD_PATTERN = Pattern.compile(
"^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)(?=.*[^A-Za-z\\d]).{12,64}$"
);
+ private static final String MEMBER_STATUS_ALL = "ALL";
+ private static final String MEMBER_STATUS_ACTIVE = "ACTIVE";
+ private static final String MEMBER_STATUS_EXPIRED = "EXPIRED";
private final UserMapper userMapper;
private final ClinicMapper clinicMapper;
@@ -61,8 +65,12 @@
Long clinicId,
Integer status,
Integer isMember,
+ String memberStatus,
+ LocalDateTime memberExpireFrom,
+ LocalDateTime memberExpireTo,
LocalDateTime registeredFrom,
LocalDateTime registeredTo) {
+ String normalizedMemberStatus = normalizeMemberStatus(memberStatus);
IPage<UserListRow> result = userMapper.selectUserPage(
new Page<UserListRow>(page, pageSize),
trimToNull(nickname),
@@ -70,6 +78,9 @@
clinicId,
status,
isMember,
+ normalizedMemberStatus,
+ memberExpireFrom,
+ memberExpireTo,
registeredFrom,
registeredTo
);
@@ -85,6 +96,7 @@
item.setAge(row.getAge());
item.setGender(row.getGender());
item.setIsMember(row.getIsMember() != null && row.getIsMember() == 1);
+ item.setMemberExpireAt(row.getMemberExpireAt());
item.setStatus(row.getStatus());
item.setCreatedAt(row.getCreatedAt());
list.add(item);
@@ -213,12 +225,17 @@
Long clinicId,
Integer status,
Integer isMember,
+ String memberStatus,
+ LocalDateTime memberExpireFrom,
+ LocalDateTime memberExpireTo,
LocalDateTime registeredFrom,
LocalDateTime registeredTo,
HttpServletResponse response) throws IOException {
+ String normalizedMemberStatus = normalizeMemberStatus(memberStatus);
+ boolean memberMode = normalizedMemberStatus != null;
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setCharacterEncoding("utf-8");
- String filename = URLEncoder.encode("用户列表", "UTF-8").replace("+", "%20");
+ String filename = URLEncoder.encode(memberMode ? "会员用户列表" : "用户列表", "UTF-8").replace("+", "%20");
response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + filename + ".xlsx");
List<UserListRow> rows = userMapper.selectUserList(
@@ -227,9 +244,28 @@
clinicId,
status,
isMember,
+ normalizedMemberStatus,
+ memberExpireFrom,
+ memberExpireTo,
registeredFrom,
registeredTo
);
+ if (memberMode) {
+ List<MemberUserExcelRow> memberExcelRows = new ArrayList<MemberUserExcelRow>();
+ for (UserListRow row : rows) {
+ MemberUserExcelRow excel = new MemberUserExcelRow();
+ excel.setId(row.getId());
+ excel.setNickname(row.getNickname());
+ excel.setPhone(PhoneMasker.mask(row.getPhone()));
+ excel.setMemberStatus(row.getIsMember() != null && row.getIsMember() == 1 ? "生效中" : "已失效");
+ excel.setMemberExpireAt(DateTimes.format(row.getMemberExpireAt()));
+ memberExcelRows.add(excel);
+ }
+ FastExcel.write(response.getOutputStream(), MemberUserExcelRow.class)
+ .sheet("会员用户列表")
+ .doWrite(memberExcelRows);
+ return;
+ }
List<UserExcelRow> excelRows = new ArrayList<UserExcelRow>();
for (UserListRow row : rows) {
UserExcelRow excel = new UserExcelRow();
@@ -275,6 +311,18 @@
return trimmed.isEmpty() ? null : trimmed;
}
+ private String normalizeMemberStatus(String memberStatus) {
+ String normalized = trimToNull(memberStatus);
+ if (normalized == null) {
+ return null;
+ }
+ String upper = normalized.toUpperCase();
+ if (MEMBER_STATUS_ALL.equals(upper) || MEMBER_STATUS_ACTIVE.equals(upper) || MEMBER_STATUS_EXPIRED.equals(upper)) {
+ return upper;
+ }
+ throw new IllegalArgumentException("会员状态筛选不合法");
+ }
+
private String typeText(Integer type) {
return type != null && type == 1 ? "诊所" : "个人";
}
--
Gitblit v1.7.1