tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/entity/AgentRegion.java
@@ -11,12 +11,14 @@ import java.time.LocalDateTime; /** 省级代理负责的行政区域。 */ @TableName("tcm_agent_region") @Getter @Setter @NoArgsConstructor public class AgentRegion { /** 主键。 */ @TableId(type = IdType.AUTO) private Long id; @@ -35,3 +37,8 @@ @TableField("created_at") private LocalDateTime createdAt; } /** 代理ID。 */ /** 行政区域编码。 */ /** 行政区域名称。 */ /** 行政区域层级。 */ /** 创建时间。 */ tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/entity/ProvincialAgent.java
@@ -7,15 +7,18 @@ import java.time.LocalDateTime; /** 省级代理及其结算、联系信息。 */ @TableName("tcm_provincial_agent") @Getter @Setter @NoArgsConstructor public class ProvincialAgent { /** 主键。 */ @TableId(type = IdType.AUTO) private Long id; /** 代理名称。 */ @TableField("agent_name") private String agentName; @@ -37,8 +40,10 @@ @TableField("contact_info") private String contactInfo; /** 状态:0禁用,1启用。 */ private Integer status; /** 联系地址。 */ @TableField("address") private String address; tcm-training-admin-backend/src/main/java/com/tcm/training/admin/agent/service/ProvincialAgentAppService.java
@@ -24,6 +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 javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -94,7 +95,7 @@ return toDetail(require(id)); } @Transactional @Transactional(rollbackFor = Exception.class) public ProvincialAgentDetailVO create(ProvincialAgentSaveRequest request) { boolean firstAgent = agentMapper.selectCount(new LambdaQueryWrapper<ProvincialAgent>() .eq(ProvincialAgent::getDeleted, 0)) == 0; @@ -121,7 +122,7 @@ return detail(agent.getId()); } @Transactional @Transactional(rollbackFor = Exception.class) public ProvincialAgentDetailVO update(Long id, ProvincialAgentSaveRequest request) { ProvincialAgent agent = require(id); fill(agent, request); @@ -131,7 +132,7 @@ return detail(id); } @Transactional @Transactional(rollbackFor = Exception.class) public void delete(Long id) { require(id); agentMapper.deleteById(id); @@ -145,7 +146,7 @@ agent.setAccountHolder(trim(request.getAccountHolder())); agent.setBranchName(trim(request.getBranchName())); agent.setContactInfo(trim(request.getContactInfo())); agent.setStatus(request.getStatus() == null ? 1 : request.getStatus()); agent.setStatus(request.getStatus() == null ? EnabledStatus.ENABLED.getValue() : request.getStatus()); agent.setAddress(trim(request.getAddress())); } tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/bankcard/service/AppBankCardService.java
@@ -1,6 +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.app.bankcard.dto.AppBankCardUpdateRequest; import com.tcm.training.admin.app.bankcard.vo.AppBankCardVO; import com.tcm.training.admin.live.entity.Clinic; @@ -22,7 +23,7 @@ public AppBankCardVO detail() { return toVO(requireClinic()); } @Transactional @Transactional(rollbackFor = Exception.class) public AppBankCardVO update(AppBankCardUpdateRequest request) { Clinic clinic = requireClinic(); clinic.setBankName(trim(request.getBankName())); @@ -36,11 +37,11 @@ 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() != 1 || user.getClinicId() == null) throw new IllegalArgumentException("当前账号未绑定诊所"); if (user.getType() == null || user.getType() != UserType.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; } private AppBankCardVO toVO(Clinic c) { AppBankCardVO v=new AppBankCardVO(); v.setBankName(c.getBankName()); v.setAccountName(c.getAccountHolder()); v.setAccountNumber(c.getAccountNumber()); v.setBranchName(c.getBranchName()); return v; } private String trim(String value) { return value == null ? null : value.trim(); } } } tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/popularization/service/AppHealthPopularizationService.java
@@ -61,7 +61,7 @@ /** * 获取 APP 健康科普详情页数据,并在每次访问时累加点击量。 */ @Transactional @Transactional(rollbackFor = Exception.class) public AppHealthPopularizationDetailVO detail(Long popularizationId) { HealthPopularization item = requireEnabledItem(popularizationId); // 参考项目介绍,APP 进入详情后累加点击量并回写。 tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/projectintroduction/service/AppProjectIntroductionService.java
@@ -54,7 +54,7 @@ /** * 获取APP项目介绍详情,并增加点击量 */ @Transactional @Transactional(rollbackFor = Exception.class) public AppProjectIntroductionDetailVO getDetail(Long id) { ProjectIntroduction entity = projectIntroductionMapper.selectOne( new LambdaQueryWrapper<ProjectIntroduction>() tcm-training-admin-backend/src/main/java/com/tcm/training/admin/app/register/service/AppRegisterService.java
@@ -31,6 +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 java.util.List; import java.util.UUID; @@ -127,8 +129,8 @@ AppUser user = new AppUser(); user.setPhone(phone); user.setType(0); user.setStatus(1); user.setType(UserType.DOCTOR.getValue()); user.setStatus(UserStatus.ENABLED.getValue()); // 优先同步海诊通同手机号用户资料,未命中时使用手机号兜底昵称。 HztAppUser hztAppUser = findHztAppUserByPhone(phone); @@ -165,7 +167,7 @@ /** * 完成经营者第二步,创建本地诊所与诊所用户。 */ @Transactional @Transactional(rollbackFor = Exception.class) public AppLoginResponse completeOperatorRegister(AppRegisterOperatorCompleteRequest request) { OperatorRegisterDraft draft = loadDraft(normalizeRegisterTicket(request.getRegisterTicket())); ensurePhoneAvailable(draft.getPhone()); @@ -183,7 +185,7 @@ clinic.setAddress(trimRequired(request.getDetailAddress(), "请输入详细地址")); clinic.setBusinessLicenseUrl(trimToNull(request.getBusinessLicenseUrl())); clinic.setInviteCode(generateInviteCode()); clinic.setStatus(1); clinic.setStatus(UserStatus.ENABLED.getValue()); clinic.setAgentId(4L); // 绑定到默认的省代上面 @@ -192,8 +194,8 @@ AppUser user = new AppUser(); user.setNickname(clinic.getName()); user.setPhone(draft.getPhone()); user.setType(1); user.setStatus(1); user.setType(UserType.CLINIC.getValue()); user.setStatus(UserStatus.ENABLED.getValue()); user.setClinicId(clinic.getId()); userMapper.insert(user); tcm-training-admin-backend/src/main/java/com/tcm/training/admin/bootstrap/DataInitializer.java
@@ -15,6 +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 java.time.LocalDateTime; import java.util.ArrayList; @@ -56,7 +57,7 @@ user.setUsername("admin"); user.setNickname("管理员"); user.setRealName("系统管理员"); user.setStatus(1); user.setStatus(EnabledStatus.ENABLED.getValue()); user.setDeleted(0); user.setPassword(passwordEncoder.encode("Admin@123456")); user.setCreatedAt(LocalDateTime.now()); @@ -82,7 +83,7 @@ role = new SysRole(); role.setRoleName("超级管理员"); role.setRoleCode("SUPER_ADMIN"); role.setStatus(1); role.setStatus(EnabledStatus.ENABLED.getValue()); role.setDeleted(0); role.setRemark("默认拥有全部后台权限"); role.setCreatedAt(LocalDateTime.now()); @@ -428,7 +429,7 @@ menu.setComponent(component); menu.setIcon(icon); menu.setSort(sort); menu.setStatus(1); menu.setStatus(EnabledStatus.ENABLED.getValue()); menu.setVisible(1); menu.setPermissionKey(permissionKey); menu.setRemark(remark); tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/Clinic.java
@@ -12,17 +12,21 @@ import java.time.LocalDateTime; /** 诊所及其归属代理、联系和结算信息。 */ @TableName("tcm_clinic") @Getter @Setter @NoArgsConstructor public class Clinic { /** 主键。 */ @TableId(type = IdType.AUTO) private Long id; /** 诊所名称。 */ private String name; /** 归属代理ID。 */ @TableField("agent_id") private Long agentId; @@ -50,8 +54,10 @@ @TableField("district_name") private String districtName; /** 详细地址。 */ private String address; /** 营业执照文件地址。 */ @TableField("business_license_url") private String businessLicenseUrl; @@ -88,3 +94,21 @@ @TableField("updated_at") private LocalDateTime updatedAt; } /** 联系人姓名。 */ /** 联系电话。 */ /** 省级行政区编码。 */ /** 省级行政区名称。 */ /** 市级行政区编码。 */ /** 市级行政区名称。 */ /** 区县行政区编码。 */ /** 区县行政区名称。 */ /** 邀请码。 */ /** 开户银行。 */ /** 银行账号。 */ /** 银行账户户名。 */ /** 开户支行。 */ /** 逻辑删除标识:0未删除,1已删除。 */ /** 创建人。 */ /** 最后更新人。 */ /** 创建时间。 */ /** 最后更新时间。 */ tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/HealthPopularization.java
@@ -13,6 +13,7 @@ import java.time.LocalDateTime; @TableName("tcm_health_popularization") /** 养生科普内容实体。 */ @Getter @Setter @NoArgsConstructor tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/LiveCourse.java
@@ -15,6 +15,7 @@ import java.util.List; @TableName(value = "tcm_live_course", autoResultMap = true) /** 养生直播课程实体。 */ @Getter @Setter @NoArgsConstructor tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/ProjectIntroduction.java
@@ -13,6 +13,7 @@ import java.time.LocalDateTime; @TableName("tcm_project_introduction") /** 项目介绍内容实体。 */ @Getter @Setter @NoArgsConstructor tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/entity/ProjectIntroductionPassword.java
@@ -11,6 +11,7 @@ @Getter @Setter @TableName("tcm_project_introduction_password") /** 项目介绍访问密码配置。 */ public class ProjectIntroductionPassword { @TableId(type = IdType.AUTO) tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/HealthPopularizationAppService.java
@@ -56,7 +56,7 @@ return toDetailVO(requireItem(id)); } @Transactional @Transactional(rollbackFor = Exception.class) public HealthPopularizationDetailVO create(HealthPopularizationSaveRequest req) { HealthPopularization item = new HealthPopularization(); fillEntity(item, req); @@ -66,7 +66,7 @@ return detail(item.getId()); } @Transactional @Transactional(rollbackFor = Exception.class) public HealthPopularizationDetailVO update(Long id, HealthPopularizationSaveRequest req) { HealthPopularization item = requireItem(id); fillEntity(item, req); @@ -74,7 +74,7 @@ return detail(id); } @Transactional @Transactional(rollbackFor = Exception.class) public void delete(Long id) { requireItem(id); healthPopularizationMapper.deleteById(id); tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveCourseAppService.java
@@ -27,6 +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 java.util.ArrayList; import java.util.List; @@ -83,7 +84,7 @@ return PageResponse.of(list, p.getTotal(), p.getCurrent(), p.getSize()); } @Transactional @Transactional(rollbackFor = Exception.class) public LiveCourseDetailVO create(LiveCourseUpsertRequest req) { throw new IllegalArgumentException("直播课程为初始化数据,禁止新增"); /* @@ -134,7 +135,7 @@ return vo; } @Transactional @Transactional(rollbackFor = Exception.class) public LiveCourseDetailVO update(Long id, LiveCourseUpsertRequest req) { validateExpert(req.getExpertId()); @@ -158,7 +159,7 @@ return detail(id); } @Transactional @Transactional(rollbackFor = Exception.class) public LiveCourseStatusVO patchStatus(Long id, LiveCourseStatusRequest req) { LiveCourse course = liveCourseMapper.selectById(id); if (course == null) { @@ -169,7 +170,7 @@ return new LiveCourseStatusVO(id, req.getStatus()); } @Transactional @Transactional(rollbackFor = Exception.class) public void updatePassword(Long id, LiveCoursePasswordRequest req) { String password = req.getPassword(); if (StrUtil.isNotBlank(password)) { @@ -208,7 +209,7 @@ } } @Transactional @Transactional(rollbackFor = Exception.class) public void delete(Long id) { throw new IllegalArgumentException("直播课程为初始化数据,禁止删除"); } @@ -218,7 +219,7 @@ if (expert == null) { throw new IllegalArgumentException("授课专家不存在"); } if (expert.getStatus() != null && expert.getStatus() != 1) { if (expert.getStatus() != null && expert.getStatus() != EnabledStatus.ENABLED.getValue()) { throw new IllegalArgumentException("授课专家已禁用"); } } tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/LiveRoomSettingService.java
@@ -19,7 +19,7 @@ return toVO(mapper.selectCurrent()); } @Transactional @Transactional(rollbackFor = Exception.class) public LiveRoomSettingVO save(LiveRoomSettingSaveRequest request) { LiveRoomSetting setting = mapper.selectCurrent(); if (setting == null) { tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/ProjectIntroductionAppService.java
@@ -60,7 +60,7 @@ return toDetailVO(requireItem(id)); } @Transactional @Transactional(rollbackFor = Exception.class) public ProjectIntroductionDetailVO create(ProjectIntroductionSaveRequest req) { ProjectIntroduction item = new ProjectIntroduction(); fillEntity(item, req); @@ -70,7 +70,7 @@ return detail(item.getId()); } @Transactional @Transactional(rollbackFor = Exception.class) public ProjectIntroductionDetailVO update(Long id, ProjectIntroductionSaveRequest req) { ProjectIntroduction item = requireItem(id); fillEntity(item, req); @@ -78,7 +78,7 @@ return detail(id); } @Transactional @Transactional(rollbackFor = Exception.class) public void delete(Long id) { requireItem(id); projectIntroductionMapper.deleteById(id); tcm-training-admin-backend/src/main/java/com/tcm/training/admin/live/service/ProjectIntroductionPasswordService.java
@@ -48,7 +48,7 @@ /** * 保存项目介绍密码配置 */ @Transactional @Transactional(rollbackFor = Exception.class) public void savePasswordConfig(ProjectIntroductionPasswordRequest req) { // 验证密码格式 if (req.getPasswordEnabled() == 1) {