From f4e8dfd7f8f11966f4b5dc8c6661cbc3feccc4cf Mon Sep 17 00:00:00 2001
From: hejianhao <15708179461@qq.com>
Date: 星期二, 01 九月 2026 16:17:29 +0800
Subject: [PATCH] fix0901: 继续修复扫描问题

---
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/system/service/AppVersionSettingsAppService.java |    2 
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatusEnum.java                 |   13 ++++
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserTypeEnum.java                   |   13 ++++
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/UserAppService.java               |   12 ++--
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/statistics/service/UserStatisticsAppService.java |   12 ++--
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java     |    4 
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java           |    4 
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/register/service/AppRegisterService.java     |   14 ++--
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/bootstrap/DataInitializer.java                   |    8 +-
 /dev/null                                                                                                        |   17 -----
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/LiveRoomSetting.java                 |    5 +
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/bankcard/service/AppBankCardService.java     |    4 
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/ClinicAppService.java             |    2 
 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatusEnum.java              |   13 ++++
 14 files changed, 74 insertions(+), 49 deletions(-)

diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
index 4fb9150..68f66c6 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
@@ -24,7 +24,7 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.tcm.training.admin.common.enums.EnabledStatus;
+import com.tcm.training.admin.common.enums.EnabledStatusEnum;
 
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
@@ -146,7 +146,7 @@
         agent.setAccountHolder(trim(request.getAccountHolder()));
         agent.setBranchName(trim(request.getBranchName()));
         agent.setContactInfo(trim(request.getContactInfo()));
-        agent.setStatus(request.getStatus() == null ? EnabledStatus.ENABLED.getValue() : request.getStatus());
+        agent.setStatus(request.getStatus() == null ? EnabledStatusEnum.ENABLED.getValue() : request.getStatus());
         agent.setAddress(trim(request.getAddress()));
     }
 
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/bankcard/service/AppBankCardService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/bankcard/service/AppBankCardService.java
index bfc7041..468e6ac 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/bankcard/service/AppBankCardService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/bankcard/service/AppBankCardService.java
@@ -1,7 +1,7 @@
 package com.tcm.training.admin.app.bankcard.service;
 
 import com.tcm.training.admin.app.auth.service.AppAuthSessionService;
-import com.tcm.training.admin.member.enums.UserType;
+import com.tcm.training.admin.member.enums.UserTypeEnum;
 import com.tcm.training.admin.app.bankcard.dto.AppBankCardUpdateRequest;
 import com.tcm.training.admin.app.bankcard.vo.AppBankCardVO;
 import com.tcm.training.admin.live.entity.Clinic;
@@ -37,7 +37,7 @@
     private Clinic requireClinic() {
         AppUser user = userMapper.selectById(sessionService.requireLoginUserId());
         if (user == null || user.getDeleted() == null || user.getDeleted() != 0) throw new IllegalArgumentException("用户不存在");
-        if (user.getType() == null || user.getType() != UserType.CLINIC.getValue() || user.getClinicId() == null) throw new IllegalArgumentException("当前账号未绑定诊所");
+        if (user.getType() == null || user.getType() != UserTypeEnum.CLINIC.getValue() || user.getClinicId() == null) throw new IllegalArgumentException("当前账号未绑定诊所");
         Clinic clinic = clinicMapper.selectById(user.getClinicId());
         if (clinic == null || clinic.getDeleted() == null || clinic.getDeleted() != 0) throw new IllegalArgumentException("诊所不存在");
         return clinic;
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/register/service/AppRegisterService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/register/service/AppRegisterService.java
index cc4a501..e61a1b8 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/register/service/AppRegisterService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/register/service/AppRegisterService.java
@@ -31,8 +31,8 @@
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import com.tcm.training.admin.member.enums.UserStatus;
-import com.tcm.training.admin.member.enums.UserType;
+import com.tcm.training.admin.member.enums.UserStatusEnum;
+import com.tcm.training.admin.member.enums.UserTypeEnum;
 
 import java.util.List;
 import java.util.UUID;
@@ -129,8 +129,8 @@
 
         AppUser user = new AppUser();
         user.setPhone(phone);
-        user.setType(UserType.DOCTOR.getValue());
-        user.setStatus(UserStatus.ENABLED.getValue());
+        user.setType(UserTypeEnum.DOCTOR.getValue());
+        user.setStatus(UserStatusEnum.ENABLED.getValue());
 
         // 优先同步海诊通同手机号用户资料,未命中时使用手机号兜底昵称。
         HztAppUser hztAppUser = findHztAppUserByPhone(phone);
@@ -185,7 +185,7 @@
         clinic.setAddress(trimRequired(request.getDetailAddress(), "请输入详细地址"));
         clinic.setBusinessLicenseUrl(trimToNull(request.getBusinessLicenseUrl()));
         clinic.setInviteCode(generateInviteCode());
-        clinic.setStatus(UserStatus.ENABLED.getValue());
+        clinic.setStatus(UserStatusEnum.ENABLED.getValue());
 
         clinic.setAgentId(4L); // 绑定到默认的省代上面
 
@@ -194,8 +194,8 @@
         AppUser user = new AppUser();
         user.setNickname(clinic.getName());
         user.setPhone(draft.getPhone());
-        user.setType(UserType.CLINIC.getValue());
-        user.setStatus(UserStatus.ENABLED.getValue());
+        user.setType(UserTypeEnum.CLINIC.getValue());
+        user.setStatus(UserStatusEnum.ENABLED.getValue());
         user.setClinicId(clinic.getId());
         userMapper.insert(user);
 
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/bootstrap/DataInitializer.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/bootstrap/DataInitializer.java
index 4c24eb2..84d06a6 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/bootstrap/DataInitializer.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/bootstrap/DataInitializer.java
@@ -15,7 +15,7 @@
 import org.springframework.boot.ApplicationRunner;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Component;
-import com.tcm.training.admin.common.enums.EnabledStatus;
+import com.tcm.training.admin.common.enums.EnabledStatusEnum;
 
 import java.time.LocalDateTime;
 import java.util.ArrayList;
@@ -57,7 +57,7 @@
             user.setUsername("admin");
             user.setNickname("管理员");
             user.setRealName("系统管理员");
-            user.setStatus(EnabledStatus.ENABLED.getValue());
+            user.setStatus(EnabledStatusEnum.ENABLED.getValue());
             user.setDeleted(0);
             user.setPassword(passwordEncoder.encode("Admin@123456"));
             user.setCreatedAt(LocalDateTime.now());
@@ -83,7 +83,7 @@
         role = new SysRole();
         role.setRoleName("超级管理员");
         role.setRoleCode("SUPER_ADMIN");
-            role.setStatus(EnabledStatus.ENABLED.getValue());
+            role.setStatus(EnabledStatusEnum.ENABLED.getValue());
         role.setDeleted(0);
         role.setRemark("默认拥有全部后台权限");
         role.setCreatedAt(LocalDateTime.now());
@@ -429,7 +429,7 @@
         menu.setComponent(component);
         menu.setIcon(icon);
         menu.setSort(sort);
-                menu.setStatus(EnabledStatus.ENABLED.getValue());
+                menu.setStatus(EnabledStatusEnum.ENABLED.getValue());
         menu.setVisible(1);
         menu.setPermissionKey(permissionKey);
         menu.setRemark(remark);
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatus.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatus.java
deleted file mode 100644
index 90dc1f7..0000000
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatus.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.tcm.training.admin.common.enums;
-
-/** 通用启用状态。 */
-public enum EnabledStatus {
-    DISABLED(0),
-    ENABLED(1);
-
-    private final int value;
-
-    EnabledStatus(int value) {
-        this.value = value;
-    }
-
-    public int getValue() {
-        return value;
-    }
-}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatusEnum.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatusEnum.java
new file mode 100644
index 0000000..f05a2a8
--- /dev/null
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/common/enums/EnabledStatusEnum.java
@@ -0,0 +1,13 @@
+package com.tcm.training.admin.common.enums;
+
+/** 通用启用状态。 */
+public enum EnabledStatusEnumEnum {
+    DISABLED(0, "禁用"), ENABLED(1, "启用");
+    /** 状态编码。 */ private final int code;
+    /** 状态描述。 */ private final String desc;
+    EnabledStatusEnumEnum(int code, String desc) { this.code = code; this.desc = desc; }
+    public int getCode() { return code; }
+    public int getValue() { return code; }
+    public String getDesc() { return desc; }
+    public static EnabledStatusEnumEnum getByCode(int code) { for (EnabledStatusEnumEnum item : values()) if (item.code == code) return item; return null; }
+}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/LiveRoomSetting.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/LiveRoomSetting.java
index 9ec66f4..3afab7c 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/LiveRoomSetting.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/LiveRoomSetting.java
@@ -10,10 +10,13 @@
 @Getter
 @Setter
 @NoArgsConstructor
+/** 直播间基础配置实体。 */
 public class LiveRoomSetting {
+    /** 首页横幅图片地址。 */
     @TableField("banner_image_url")
     private String bannerImageUrl;
 
+    /** 直播间地址。 */
     @TableField("live_room_url")
     private String liveRoomUrl;
-}
\ No newline at end of file
+}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
index 75ecddf..3add64d 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
@@ -27,7 +27,7 @@
 import org.springframework.stereotype.Service;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.transaction.annotation.Transactional;
-import com.tcm.training.admin.common.enums.EnabledStatus;
+import com.tcm.training.admin.common.enums.EnabledStatusEnum;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -219,7 +219,7 @@
         if (expert == null) {
             throw new IllegalArgumentException("授课专家不存在");
         }
-        if (expert.getStatus() != null && expert.getStatus() != EnabledStatus.ENABLED.getValue()) {
+        if (expert.getStatus() != null && expert.getStatus() != EnabledStatusEnum.ENABLED.getValue()) {
             throw new IllegalArgumentException("授课专家已禁用");
         }
     }
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatus.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatus.java
deleted file mode 100644
index 3af1407..0000000
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatus.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.tcm.training.admin.member.enums;
-
-/** APP 用户状态。 */
-public enum UserStatus {
-    DISABLED(0),
-    ENABLED(1);
-
-    private final int value;
-
-    UserStatus(int value) {
-        this.value = value;
-    }
-
-    public int getValue() {
-        return value;
-    }
-}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatusEnum.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatusEnum.java
new file mode 100644
index 0000000..b7de88c
--- /dev/null
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserStatusEnum.java
@@ -0,0 +1,13 @@
+package com.tcm.training.admin.member.enums;
+
+/** APP 用户状态。 */
+public enum UserStatusEnumEnum {
+    DISABLED(0, "禁用"), ENABLED(1, "启用");
+    /** 状态编码。 */ private final int code;
+    /** 状态描述。 */ private final String desc;
+    UserStatusEnumEnum(int code, String desc) { this.code = code; this.desc = desc; }
+    public int getCode() { return code; }
+    public int getValue() { return code; }
+    public String getDesc() { return desc; }
+    public static UserStatusEnumEnum getByCode(int code) { for (UserStatusEnumEnum item : values()) if (item.code == code) return item; return null; }
+}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserType.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserType.java
deleted file mode 100644
index 3364c8e..0000000
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserType.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package com.tcm.training.admin.member.enums;
-
-/** APP 用户类型。 */
-public enum UserType {
-    DOCTOR(0),
-    CLINIC(1);
-
-    private final int value;
-
-    UserType(int value) {
-        this.value = value;
-    }
-
-    public int getValue() {
-        return value;
-    }
-}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserTypeEnum.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserTypeEnum.java
new file mode 100644
index 0000000..de7f0e0
--- /dev/null
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/enums/UserTypeEnum.java
@@ -0,0 +1,13 @@
+package com.tcm.training.admin.member.enums;
+
+/** APP 用户类型。 */
+public enum UserTypeEnumEnum {
+    DOCTOR(0, "医生"), CLINIC(1, "诊所");
+    /** 类型编码。 */ private final int code;
+    /** 类型描述。 */ private final String desc;
+    UserTypeEnumEnum(int code, String desc) { this.code = code; this.desc = desc; }
+    public int getCode() { return code; }
+    public int getValue() { return code; }
+    public String getDesc() { return desc; }
+    public static UserTypeEnumEnum getByCode(int code) { for (UserTypeEnumEnum item : values()) if (item.code == code) return item; return null; }
+}
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/ClinicAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/ClinicAppService.java
index f62d381..3136c3e 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/ClinicAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/member/service/ClinicAppService.java
@@ -104,7 +104,7 @@
                 .doWrite(Collections.emptyList());
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void importAgentBindings(MultipartFile file) throws IOException {
         if (file == null || file.isEmpty()) {
             throw new IllegalArgumentException("请选择导入文件");
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 bcc1370..a0617b7 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
@@ -141,7 +141,7 @@
         return vo;
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public UserDetailVO update(Long id, UserUpdateRequest req) {
         AppUser user = requireUser(id);
         if (req.getClinicId() != null) {
@@ -169,7 +169,7 @@
         return detail(id);
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public UserStatusVO patchStatus(Long id, UserStatusRequest req) {
         AppUser user = requireUser(id);
         user.setStatus(req.getStatus());
@@ -177,7 +177,7 @@
         return new UserStatusVO(id, req.getStatus());
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void resetPassword(Long id, UserResetPasswordRequest req) {
         AppUser user = requireUser(id);
         if (!req.getNewPassword().equals(req.getConfirmPassword())) {
@@ -188,13 +188,13 @@
         userMapper.updateById(user);
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void delete(Long id) {
         requireUser(id);
         userMapper.deleteById(id);
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public UserDetailVO unbindWechat(Long id) {
         requireUser(id);
         userMapper.update(null, new LambdaUpdateWrapper<AppUser>()
@@ -206,7 +206,7 @@
         return detail(id);
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public void batchUpdateClinic(UserBatchClinicUpdateRequest req) {
         Clinic clinic = clinicMapper.selectById(req.getClinicId());
         if (clinic == null || Integer.valueOf(1).equals(clinic.getDeleted())) {
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/statistics/service/UserStatisticsAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/statistics/service/UserStatisticsAppService.java
index 0b81083..d951b7c 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/statistics/service/UserStatisticsAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/statistics/service/UserStatisticsAppService.java
@@ -37,14 +37,14 @@
     public UserStatisticsVO statistics(String type, LocalDate dateFrom, LocalDate dateTo) {
         DateRange range = normalizeRange(dateFrom, dateTo);
         String normalizedType = normalizeType(type);
-        String mapperUserType = resolveUserType(normalizedType);
+        String mapperUserTypeEnum = resolveUserTypeEnum(normalizedType);
         LocalDateTime startTime = range.getStart().atStartOfDay();
         LocalDateTime endTime = LocalDateTime.of(range.getEnd(), LocalTime.MAX);
 
-        UserStatisticsOverviewRow overviewRow = userStatisticsMapper.selectOverview(mapperUserType, startTime, endTime);
-        List<UserStatisticsRegisterTrendRow> registerRows = userStatisticsMapper.selectRegisterTrend(mapperUserType, startTime, endTime);
-        List<UserStatisticsActiveTrendRow> activeRows = userStatisticsMapper.selectActiveTrend(mapperUserType, startTime, endTime);
-        UserStatisticsCompositionRow compositionRow = userStatisticsMapper.selectMemberComposition(mapperUserType, startTime, endTime);
+        UserStatisticsOverviewRow overviewRow = userStatisticsMapper.selectOverview(mapperUserTypeEnum, startTime, endTime);
+        List<UserStatisticsRegisterTrendRow> registerRows = userStatisticsMapper.selectRegisterTrend(mapperUserTypeEnum, startTime, endTime);
+        List<UserStatisticsActiveTrendRow> activeRows = userStatisticsMapper.selectActiveTrend(mapperUserTypeEnum, startTime, endTime);
+        UserStatisticsCompositionRow compositionRow = userStatisticsMapper.selectMemberComposition(mapperUserTypeEnum, startTime, endTime);
 
         UserStatisticsVO result = new UserStatisticsVO();
         result.setOverview(buildOverview(overviewRow));
@@ -125,7 +125,7 @@
         throw new IllegalArgumentException("用户类型不合法");
     }
 
-    private String resolveUserType(String normalizedType) {
+    private String resolveUserTypeEnum(String normalizedType) {
         if (FILTER_ALL.equals(normalizedType)) {
             return null;
         }
diff --git a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/system/service/AppVersionSettingsAppService.java b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/system/service/AppVersionSettingsAppService.java
index 54cb396..920ed6c 100644
--- a/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/system/service/AppVersionSettingsAppService.java
+++ b/tcm-training-admin-backend/src/main/java/com/tcm/training/admin/system/service/AppVersionSettingsAppService.java
@@ -42,7 +42,7 @@
         return toDetailVO(requireItem(id));
     }
 
-    @Transactional
+    @Transactional(rollbackFor = Exception.class)
     public AppVersionDetailVO create(AppVersionCreateRequest request) {
         AppVersionConfig latest = latest();
         String androidFileUrl = normalizeOptionalText(request.getAndroidFileUrl());

--
Gitblit v1.7.1