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