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); } } src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorAuthDeleteDto.java
New file @@ -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; } src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorBindDto.java
New file @@ -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; } src/main/java/cc/mrbird/febs/mall/dto/ApiDoctorListDto.java
New file @@ -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; } src/main/java/cc/mrbird/febs/mall/entity/MallDoctor.java
New file @@ -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; } 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; } src/main/java/cc/mrbird/febs/mall/mapper/MallDoctorMapper.java
New file @@ -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> { } 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); } 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 = "爱和美医疗"; src/main/java/cc/mrbird/febs/mall/vo/ApiDoctorListVo.java
New file @@ -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; } src/main/java/cc/mrbird/febs/mall/vo/MallMemberVo.java
@@ -99,4 +99,7 @@ @ApiModelProperty(value = "会员信息") private MallVipConfig vipInfo; @ApiModelProperty(value = "是否是医生") private Integer doctorState; }