Files
gym-manage/src/main/java/com/gym/manage/application/service/MemberService.java
T
2026-03-05 13:48:13 +08:00

135 lines
5.9 KiB
Java

package com.gym.manage.application.service;
import com.gym.manage.api.dto.request.MemberCreateRequest;
import com.gym.manage.api.dto.request.MemberUpdateRequest;
import com.gym.manage.api.dto.response.MemberResponse;
import com.gym.manage.common.constant.ErrorCode;
import com.gym.manage.common.exception.BusinessException;
import com.gym.manage.domain.entity.Member;
import com.gym.manage.domain.repository.MemberRepository;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import reactor.core.publisher.Flux;
import reactor.core.publisher.Mono;
import java.time.LocalDateTime;
@Slf4j
@Service
@RequiredArgsConstructor
public class MemberService {
private final MemberRepository memberRepository;
public Mono<MemberResponse> createMember(MemberCreateRequest request) {
log.info("创建会员: phone={}", request.getPhone());
return memberRepository.findByPhoneAndDeletedAtIsNull(request.getPhone())
.flatMap(existingMember -> Mono.<Member>error(
new BusinessException(ErrorCode.MEMBER_ALREADY_EXISTS, "该手机号已注册")
))
.switchIfEmpty(Mono.defer(() -> {
Member member = new Member();
member.setTenantId(request.getTenantId());
member.setStoreId(request.getStoreId());
member.setName(request.getName());
member.setPhone(request.getPhone());
member.setGender(request.getGender());
member.setBirthday(request.getBirthday());
member.setIdCard(request.getIdCard());
member.setEmergencyContact(request.getEmergencyContact());
member.setEmergencyPhone(request.getEmergencyPhone());
member.setLevel(request.getLevel());
member.setStatus("ACTIVE");
member.setSource(request.getSource());
member.setRemark(request.getRemark());
member.setCreatedAt(LocalDateTime.now());
member.setUpdatedAt(LocalDateTime.now());
return memberRepository.save(member);
}))
.map(this::toMemberResponse)
.doOnSuccess(response -> log.info("会员创建成功: memberId={}", response.getId()))
.doOnError(e -> log.error("会员创建失败: phone={}, error={}", request.getPhone(), e.getMessage()));
}
public Mono<MemberResponse> getMember(Long id) {
log.info("查询会员: memberId={}", id);
return memberRepository.findByIdAndDeletedAtIsNull(id)
.switchIfEmpty(Mono.error(new BusinessException(ErrorCode.MEMBER_NOT_FOUND, "会员不存在")))
.map(this::toMemberResponse)
.doOnSuccess(response -> log.info("查询会员成功: memberId={}", id))
.doOnError(e -> log.error("查询会员失败: memberId={}, error={}", id, e.getMessage()));
}
public Flux<MemberResponse> listMembers(Long tenantId, Long storeId, int page, int size) {
log.info("查询会员列表: tenantId={}, storeId={}, page={}, size={}", tenantId, storeId, page, size);
return memberRepository.findByTenantIdAndStoreIdAndDeletedAtIsNull(
tenantId, storeId, PageRequest.of(page, size)
).map(this::toMemberResponse);
}
public Mono<MemberResponse> updateMember(Long id, MemberUpdateRequest request) {
log.info("更新会员: memberId={}", id);
return memberRepository.findByIdAndDeletedAtIsNull(id)
.switchIfEmpty(Mono.error(new BusinessException(ErrorCode.MEMBER_NOT_FOUND, "会员不存在")))
.flatMap(member -> {
member.setName(request.getName());
member.setGender(request.getGender());
member.setBirthday(request.getBirthday());
member.setIdCard(request.getIdCard());
member.setEmergencyContact(request.getEmergencyContact());
member.setEmergencyPhone(request.getEmergencyPhone());
member.setLevel(request.getLevel());
member.setStatus(request.getStatus());
member.setRemark(request.getRemark());
member.setUpdatedAt(LocalDateTime.now());
return memberRepository.save(member);
})
.map(this::toMemberResponse)
.doOnSuccess(response -> log.info("会员更新成功: memberId={}", id))
.doOnError(e -> log.error("会员更新失败: memberId={}, error={}", id, e.getMessage()));
}
public Mono<Void> deleteMember(Long id) {
log.info("删除会员: memberId={}", id);
return memberRepository.softDeleteById(id)
.flatMap(rows -> {
if (rows > 0) {
log.info("会员删除成功: memberId={}", id);
return Mono.empty();
} else {
return Mono.error(new BusinessException(ErrorCode.MEMBER_NOT_FOUND, "会员不存在"));
}
});
}
private MemberResponse toMemberResponse(Member member) {
return MemberResponse.builder()
.id(member.getId())
.tenantId(member.getTenantId())
.storeId(member.getStoreId())
.name(member.getName())
.phone(member.getPhone())
.gender(member.getGender())
.birthday(member.getBirthday())
.idCard(member.getIdCard())
.emergencyContact(member.getEmergencyContact())
.emergencyPhone(member.getEmergencyPhone())
.level(member.getLevel())
.status(member.getStatus())
.source(member.getSource())
.remark(member.getRemark())
.createdAt(member.getCreatedAt())
.updatedAt(member.getUpdatedAt())
.build();
}
}