From 82d77490b23df66b120c16e2986d1ccaca1ca314 Mon Sep 17 00:00:00 2001 From: KKSU <15274802129@163.com> Date: Tue, 08 Apr 2025 11:03:04 +0800 Subject: [PATCH] feat(mall): 添加医生绑定和授权相关功能 --- src/main/java/cc/mrbird/febs/mall/entity/MallDoctor.java | 27 ++++ src/main/java/cc/mrbird/febs/mall/vo/ApiDoctorListVo.java | 36 ++++++ src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java | 3 src/main/java/cc/mrbird/febs/mall/entity/MallMember.java | 4 src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorAuthDeleteDto.java | 16 ++ src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java | 42 ++++++ src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorBindDto.java | 20 +++ src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorListDto.java | 13 ++ src/main/java/cc/mrbird/febs/mall/mapper/MallDoctorMapper.java | 7 + src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java | 8 + src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java | 146 ++++++++++++++++++++++++ 11 files changed, 317 insertions(+), 5 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java index e588d9c..819e3fa 100644 --- a/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java +++ b/src/main/java/cc/mrbird/febs/mall/controller/ApiMallMemberController.java @@ -3,9 +3,11 @@ import cc.mrbird.febs.common.entity.FebsResponse; import cc.mrbird.febs.mall.dto.*; import cc.mrbird.febs.mall.entity.MallMember; -import cc.mrbird.febs.mall.entity.MallMemberCoupon; import cc.mrbird.febs.mall.entity.MallMemberPayment; -import cc.mrbird.febs.mall.service.*; +import cc.mrbird.febs.mall.service.IApiMallAgentService; +import cc.mrbird.febs.mall.service.IApiMallMemberService; +import cc.mrbird.febs.mall.service.IApiMallMemberWalletService; +import cc.mrbird.febs.mall.service.IMallMemberWithdrawService; import cc.mrbird.febs.mall.vo.*; import cc.mrbird.febs.vip.service.IMallVipBenefitsService; import io.swagger.annotations.Api; @@ -17,7 +19,6 @@ import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import javax.validation.Valid; import java.util.Map; /** @@ -325,4 +326,39 @@ public FebsResponse bindResult(@RequestBody @Validated BindResultDto bindResultDto) { return memberService.bindResult(bindResultDto); } + + @ApiOperation(value = "去授权") + @PostMapping(value = "/bindDoctor") + public FebsResponse bindDoctor(@RequestBody @Validated ApiDoctorBindDto dto) { + return memberService.bindDoctor(dto); + } + + @ApiOperation(value = "我的检测用户") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiDoctorListVo.class) + }) + @PostMapping(value = "/doctorList") + public FebsResponse doctorList(@RequestBody ApiDoctorListDto dto) { + + return memberService.doctorList(dto); + } + + @ApiOperation(value = "我的授权记录") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiDoctorListVo.class) + }) + @PostMapping(value = "/authList") + public FebsResponse authList() { + + return memberService.authList(); + } + + @ApiOperation(value = "我的授权记录-删除") + @PostMapping(value = "/authDel") + public FebsResponse authDel(@RequestBody @Validated ApiDoctorAuthDeleteDto dto) { + + return memberService.authDel(dto); + } + + } diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorAuthDeleteDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorAuthDeleteDto.java new file mode 100644 index 0000000..8dd0ff0 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorAuthDeleteDto.java @@ -0,0 +1,16 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +@ApiModel(value = "ApiDoctorAuthDeleteDto", description = "参数接收类") +public class ApiDoctorAuthDeleteDto { + + @NotBlank(message = "ID不能为空") + @ApiModelProperty(value = "绑定记录ID") + private Long id; +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorBindDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorBindDto.java new file mode 100644 index 0000000..4214adb --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorBindDto.java @@ -0,0 +1,20 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +@Data +@ApiModel(value = "ApiDoctorBindDto", description = "参数接收类") +public class ApiDoctorBindDto { + + @NotBlank(message = "医生邀请码不能为空") + @ApiModelProperty(value = "医生邀请码") + private String inviteId; + + @NotBlank(message = "绑定记录不能为空") + @ApiModelProperty(value = "绑定记录ID") + private Long storeMemberId; +} diff --git a/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorListDto.java b/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorListDto.java new file mode 100644 index 0000000..b5e0c11 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorListDto.java @@ -0,0 +1,13 @@ +package cc.mrbird.febs.mall.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +@ApiModel(value = "ApiDoctorListDto", description = "参数接收类") +public class ApiDoctorListDto { + + @ApiModelProperty(value = "绑定人电话") + private String phone; +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallDoctor.java b/src/main/java/cc/mrbird/febs/mall/entity/MallDoctor.java new file mode 100644 index 0000000..c36d5be --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallDoctor.java @@ -0,0 +1,27 @@ +package cc.mrbird.febs.mall.entity; + +import cc.mrbird.febs.common.entity.BaseEntity; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +@Data +@TableName("mall_doctor") +public class MallDoctor extends BaseEntity { + /** + * + `member_id` bigint(20) DEFAULT NULL, + `store_member_id` bigint(20) DEFAULT NULL, + `bind_member_id` bigint(20) DEFAULT NULL, + `bind_phone` varchar(100) DEFAULT NULL, + `bind_name` varchar(100) DEFAULT NULL, + `bind_info` varchar(150) DEFAULT NULL, + `bind_age` int(11) DEFAULT NULL, + */ + private Long memberId; + private Long storeMemberId; + private Long bindMemberId; + private String bindPhone; + private String bindName; + private String bindInfo; + private Integer bindAge; +} diff --git a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java index b2a5544..9641bde 100644 --- a/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java +++ b/src/main/java/cc/mrbird/febs/mall/entity/MallMember.java @@ -1,7 +1,5 @@ package cc.mrbird.febs.mall.entity; -import cc.mrbird.febs.common.controller.BaseController; -import cc.mrbird.febs.common.entity.BaseEntity; import cc.mrbird.febs.common.entity.BaseEntity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; @@ -183,4 +181,6 @@ private Date lastLoginTime; private Date vipLevelTime; + //是否是医生 0-否 1-是 + private Integer doctorState; } diff --git a/src/main/java/cc/mrbird/febs/mall/mapper/MallDoctorMapper.java b/src/main/java/cc/mrbird/febs/mall/mapper/MallDoctorMapper.java new file mode 100644 index 0000000..0cd9d13 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/mapper/MallDoctorMapper.java @@ -0,0 +1,7 @@ +package cc.mrbird.febs.mall.mapper; + +import cc.mrbird.febs.mall.entity.MallDoctor; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +public interface MallDoctorMapper extends BaseMapper<MallDoctor> { +} diff --git a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java index 48a2488..6539dfc 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java +++ b/src/main/java/cc/mrbird/febs/mall/service/IApiMallMemberService.java @@ -107,4 +107,12 @@ FebsResponse bindList(); FebsResponse bindResult(BindResultDto bindResultDto); + + FebsResponse bindDoctor(ApiDoctorBindDto dto); + + FebsResponse doctorList(ApiDoctorListDto dto); + + FebsResponse authList(); + + FebsResponse authDel(ApiDoctorAuthDeleteDto dto); } diff --git a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java index 978c1d5..eecd7a2 100644 --- a/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java +++ b/src/main/java/cc/mrbird/febs/mall/service/impl/ApiMallMemberServiceImpl.java @@ -88,6 +88,7 @@ private final MallStoreMapper mallStoreMapper; private final MallStoreItemMapper mallStoreItemMapper; private final MallStoreMemberMapper mallStoreMemberMapper; + private final MallDoctorMapper mallDoctorMapper; @Value("${spring.profiles.active}") @@ -1327,6 +1328,151 @@ return new FebsResponse().success().data(data); } + /** + * 绑定医生接口的实现方法 + * + * @param dto 包含绑定医生所需信息的数据传输对象 + * @return 返回操作结果的响应对象 + * @throws FebsException 如果绑定操作失败,抛出此异常 + */ + @Override + public FebsResponse bindDoctor(ApiDoctorBindDto dto) { + + // 获取当前登录用户的ID + Long memberId = LoginUserUtil.getLoginUser().getId(); + // 从DTO中提取邀请ID和门店会员ID + String inviteId = dto.getInviteId(); + Long storeMemberId = dto.getStoreMemberId(); + + // 根据门店会员ID查询门店会员信息 + MallStoreMember mallStoreMember = mallStoreMemberMapper.selectById(storeMemberId); + // 如果门店会员信息为空,抛出异常 + if(null == mallStoreMember){ + throw new FebsException("当前检测记录无法绑定!"); + } + // 如果门店会员的会员ID与当前登录用户ID不匹配,抛出异常 + if(mallStoreMember.getMemberId() != memberId){ + throw new FebsException("当前检测记录无法绑定!"); + } + + // 根据邀请ID查询会员信息 + MallMember mallMember = this.baseMapper.selectInfoByInviteId(inviteId); + // 如果会员的医生状态不是1,抛出异常 + if(1 != mallMember.getDoctorState()){ + throw new FebsException("无法绑定!"); + } + + // 查询与当前门店会员ID关联的医生列表 + List<MallDoctor> mallDoctors = mallDoctorMapper.selectList(new LambdaQueryWrapper<MallDoctor>().eq(MallDoctor::getStoreMemberId, mallStoreMember.getId())); + // 如果医生列表为空,创建新的医生对象并设置相关信息,然后插入数据库 + if(CollUtil.isEmpty(mallDoctors)){ + MallDoctor mallDoctor = new MallDoctor(); + mallDoctor.setMemberId(mallMember.getId()); + mallDoctor.setStoreMemberId(mallStoreMember.getId()); + mallDoctor.setBindMemberId(mallStoreMember.getMemberId()); + mallDoctor.setBindPhone(mallStoreMember.getPhone()); + mallDoctor.setBindName(mallStoreMember.getName()); + mallDoctor.setBindInfo(mallStoreMember.getAccount()); + mallDoctor.setBindAge(mallStoreMember.getAge()); + mallDoctorMapper.insert(mallDoctor); + } + + // 返回操作成功的响应 + return new FebsResponse().success().message("操作成功"); + } + + /** + * 获取医生列表接口的实现 + * 根据登录用户信息和查询条件,返回相应的医生列表 + * + * @param dto 包含查询条件的数据传输对象 + * @return 返回包含医生列表的响应对象 + */ + @Override + public FebsResponse doctorList(ApiDoctorListDto dto) { + // 获取当前登录用户的ID + Long memberId = LoginUserUtil.getLoginUser().getId(); + // 初始化用于存储医生信息的集合 + ArrayList<ApiDoctorListVo> apiDoctorListVos = new ArrayList<>(); + + // 创建查询条件包装器 + LambdaQueryWrapper<MallDoctor> objectQueryWrapper = new LambdaQueryWrapper<>(); + // 根据传入的手机号进行模糊查询 + if(StrUtil.isNotEmpty(dto.getPhone())){ + objectQueryWrapper.like(MallDoctor::getBindPhone,dto.getPhone()); + } + // 根据会员ID进行精确查询 + objectQueryWrapper.eq(MallDoctor::getMemberId,memberId); + // 按创建时间降序排序 + objectQueryWrapper.orderByDesc(MallDoctor::getCreatedTime); + + // 执行查询,获取医生列表 + List<MallDoctor> mallDoctors = mallDoctorMapper.selectList(objectQueryWrapper); + // 如果查询结果不为空,则遍历查询结果,封装医生信息 + if(CollUtil.isNotEmpty(mallDoctors)){ + for(MallDoctor mallDoctor : mallDoctors){ + ApiDoctorListVo apiDoctorListVo = new ApiDoctorListVo(); + apiDoctorListVo.setId(mallDoctor.getId()); + apiDoctorListVo.setStoreMemberId(mallDoctor.getStoreMemberId()); + apiDoctorListVo.setName(mallDoctor.getBindName()); + apiDoctorListVo.setPhone(mallDoctor.getBindPhone()); + apiDoctorListVo.setBindAge(mallDoctor.getBindAge()); + apiDoctorListVo.setBindInfo(mallDoctor.getBindInfo()); + apiDoctorListVo.setCreatedTime(mallDoctor.getCreatedTime()); + // 将封装好的医生信息添加到集合中 + apiDoctorListVos.add(apiDoctorListVo); + } + } + // 返回包含医生列表的响应对象 + return new FebsResponse().success().data(apiDoctorListVos); + } + + @Override + public FebsResponse authList() { + // 获取当前登录用户的ID + Long memberId = LoginUserUtil.getLoginUser().getId(); + // 初始化用于存储医生信息的集合 + ArrayList<ApiDoctorListVo> apiDoctorListVos = new ArrayList<>(); + // 创建查询条件包装器 + LambdaQueryWrapper<MallDoctor> objectQueryWrapper = new LambdaQueryWrapper<>(); + // 根据会员ID进行精确查询 + objectQueryWrapper.eq(MallDoctor::getBindMemberId,memberId); + // 按创建时间降序排序 + objectQueryWrapper.orderByDesc(MallDoctor::getCreatedTime); + // 执行查询,获取医生列表 + List<MallDoctor> mallDoctors = mallDoctorMapper.selectList(objectQueryWrapper); + // 如果查询结果不为空,则遍历查询结果,封装医生信息 + if(CollUtil.isNotEmpty(mallDoctors)){ + for(MallDoctor mallDoctor : mallDoctors){ + ApiDoctorListVo apiDoctorListVo = new ApiDoctorListVo(); + apiDoctorListVo.setId(mallDoctor.getId()); + apiDoctorListVo.setStoreMemberId(mallDoctor.getStoreMemberId()); + apiDoctorListVo.setName(mallDoctor.getBindName()); + apiDoctorListVo.setPhone(mallDoctor.getBindPhone()); + apiDoctorListVo.setBindAge(mallDoctor.getBindAge()); + apiDoctorListVo.setBindInfo(mallDoctor.getBindInfo()); + apiDoctorListVo.setCreatedTime(mallDoctor.getCreatedTime()); + // 将封装好的医生信息添加到集合中 + apiDoctorListVos.add(apiDoctorListVo); + } + } + // 返回包含医生列表的响应对象 + return new FebsResponse().success().data(apiDoctorListVos); + } + + @Override + public FebsResponse authDel(ApiDoctorAuthDeleteDto dto) { + // 获取当前登录用户的ID + Long memberId = LoginUserUtil.getLoginUser().getId(); + + MallDoctor mallDoctor = mallDoctorMapper.selectById(dto.getId()); + if(memberId != mallDoctor.getBindMemberId()){ + throw new FebsException("当前授权无法删除!"); + } + mallDoctorMapper.deleteById(dto.getId()); + return new FebsResponse().success().message("操作成功"); + } + public static void main(String[] args) { Long userld = 16425L; String shopAccount = "爱和美医疗"; diff --git a/src/main/java/cc/mrbird/febs/mall/vo/ApiDoctorListVo.java b/src/main/java/cc/mrbird/febs/mall/vo/ApiDoctorListVo.java new file mode 100644 index 0000000..95884e4 --- /dev/null +++ b/src/main/java/cc/mrbird/febs/mall/vo/ApiDoctorListVo.java @@ -0,0 +1,36 @@ +package cc.mrbird.febs.mall.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.Date; + +@Data +@ApiModel(value = "ApiDoctorListVo", description = "信息返回类") +public class ApiDoctorListVo { + + @ApiModelProperty(value = "ID") + private Long id; + + @ApiModelProperty(value = "绑定记录ID") + private Long storeMemberId; + + @ApiModelProperty(value = "绑定人") + private String name; + + @ApiModelProperty(value = "绑定人电话") + private String phone; + + @ApiModelProperty(value = "年龄") + private Integer bindAge; + + @ApiModelProperty(value = "绑定的信息") + private String bindInfo; + + @ApiModelProperty(value = "绑定时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") + private Date createdTime; + +} diff --git a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java index 59c4080..e483f7c 100644 --- a/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java +++ b/src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java @@ -99,4 +99,7 @@ @ApiModelProperty(value = "会员信息") private MallVipConfig vipInfo; + + @ApiModelProperty(value = "是否是医生") + private Integer doctorState; } -- Gitblit v1.9.1