diff --git a/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java b/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java index dd6b8fa..53ed7e9 100644 --- a/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java +++ b/src/main/java/com/sczx/user/dto/AlipayMiniProgramRegRequest.java @@ -13,4 +13,7 @@ public class AlipayMiniProgramRegRequest { @ApiModelProperty(value = "签名") private String sign; + + @ApiModelProperty(value = "推荐人userId") + private Long referralUserId; } diff --git a/src/main/java/com/sczx/user/dto/WxMiniProgramRegRequest.java b/src/main/java/com/sczx/user/dto/WxMiniProgramRegRequest.java index d9f2622..ea7f1db 100644 --- a/src/main/java/com/sczx/user/dto/WxMiniProgramRegRequest.java +++ b/src/main/java/com/sczx/user/dto/WxMiniProgramRegRequest.java @@ -8,13 +8,16 @@ import lombok.Data; @Data public class WxMiniProgramRegRequest { @ApiModelProperty(value = "微信code") - String code; + private String code; @ApiModelProperty(value = "微信手机号加密数据") - String phoneEncryptedData; + private String phoneEncryptedData; @ApiModelProperty(value = "微信手机号加密数据iv") - String phoneIv; + private String phoneIv; + + @ApiModelProperty(value = "推荐人userId") + private Long referralUserId; // @ApiModelProperty(value = "微信用户加密数据") // String userEncryptedData; diff --git a/src/main/java/com/sczx/user/mapper/BaseUserReferralMapper.java b/src/main/java/com/sczx/user/mapper/BaseUserReferralMapper.java new file mode 100644 index 0000000..bd3513c --- /dev/null +++ b/src/main/java/com/sczx/user/mapper/BaseUserReferralMapper.java @@ -0,0 +1,16 @@ +package com.sczx.user.mapper; + +import com.sczx.user.po.BaseUserReferralPO; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + *

+ * 用户引荐信息 Mapper 接口 + *

+ * + * @author zhangli + * @since 2025-08-19 23:47:42 + */ +public interface BaseUserReferralMapper extends BaseMapper { + +} diff --git a/src/main/java/com/sczx/user/po/BaseUserReferralPO.java b/src/main/java/com/sczx/user/po/BaseUserReferralPO.java new file mode 100644 index 0000000..ac43c27 --- /dev/null +++ b/src/main/java/com/sczx/user/po/BaseUserReferralPO.java @@ -0,0 +1,66 @@ +package com.sczx.user.po; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDate; +import java.time.LocalDateTime; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 用户引荐信息 + *

+ * + * @author zhangli + * @since 2025-08-19 23:47:42 + */ +@Getter +@Setter +@TableName("zc_base_user_referral") +@ApiModel(value = "BaseUserReferralPO对象", description = "用户引荐信息") +public class BaseUserReferralPO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("id主键") + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @ApiModelProperty("被引荐人id") + private Long userId; + + @ApiModelProperty("被引荐人手机号") + private String userPhoneNumber; + + @ApiModelProperty("引荐人id") + private Long referralUserId; + + @ApiModelProperty("引荐人手机号") + private String referralUserPhoneNumber; + + @ApiModelProperty("奖励截止日期") + private LocalDate awardDeadline; + + @ApiModelProperty("奖励比例") + private BigDecimal awardRate; + + @ApiModelProperty("引荐订单") + private String referralOrderNo; + + @ApiModelProperty("删除标志(0代表存在 2代表删除)") + private String delFlag; + + @ApiModelProperty("创建时间") + private LocalDateTime createTime; + + @ApiModelProperty("更新时间") + private LocalDateTime updateTime; + + +} diff --git a/src/main/java/com/sczx/user/repository/BaseUserReferralRepo.java b/src/main/java/com/sczx/user/repository/BaseUserReferralRepo.java new file mode 100644 index 0000000..1743e1a --- /dev/null +++ b/src/main/java/com/sczx/user/repository/BaseUserReferralRepo.java @@ -0,0 +1,16 @@ +package com.sczx.user.repository; + +import com.sczx.user.po.BaseUserReferralPO; +import com.baomidou.mybatisplus.extension.service.IService; + +/** + *

+ * 用户引荐信息 服务类 + *

+ * + * @author zhangli + * @since 2025-08-19 23:47:42 + */ +public interface BaseUserReferralRepo extends IService { + +} diff --git a/src/main/java/com/sczx/user/repository/impl/BaseUserReferralRepoImpl.java b/src/main/java/com/sczx/user/repository/impl/BaseUserReferralRepoImpl.java new file mode 100644 index 0000000..7d25fc9 --- /dev/null +++ b/src/main/java/com/sczx/user/repository/impl/BaseUserReferralRepoImpl.java @@ -0,0 +1,20 @@ +package com.sczx.user.repository.impl; + +import com.sczx.user.po.BaseUserReferralPO; +import com.sczx.user.mapper.BaseUserReferralMapper; +import com.sczx.user.repository.BaseUserReferralRepo; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.springframework.stereotype.Service; + +/** + *

+ * 用户引荐信息 服务实现类 + *

+ * + * @author zhangli + * @since 2025-08-19 23:47:42 + */ +@Service +public class BaseUserReferralRepoImpl extends ServiceImpl implements BaseUserReferralRepo { + +} diff --git a/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java b/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java index 2e1ab64..d75ac75 100644 --- a/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java +++ b/src/main/java/com/sczx/user/service/impl/UserServiceImpl.java @@ -9,6 +9,8 @@ import com.sczx.user.convert.UserInfoConvert; import com.sczx.user.dto.*; import com.sczx.user.exception.BizException; import com.sczx.user.po.BaseUserPO; +import com.sczx.user.po.BaseUserReferralPO; +import com.sczx.user.repository.BaseUserReferralRepo; import com.sczx.user.repository.BaseUserRepo; import com.sczx.user.service.IUserService; import com.sczx.user.thirdpart.dto.WechatDecryptedPhoneInfo; @@ -21,6 +23,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import java.nio.charset.StandardCharsets; import java.util.Objects; @@ -50,6 +53,9 @@ public class UserServiceImpl implements IUserService { @Autowired private AlipayInteg alipayInteg; + @Autowired + private BaseUserReferralRepo baseUserReferralRepo; + @Override public String getWxOpenId(String code) { @@ -130,6 +136,7 @@ public class UserServiceImpl implements IUserService { return getLoginResponse(openid,MiniProgramTypeEnum.WECHAT.getType()); } + @Transactional(rollbackFor=Exception.class) @Override public LoginResponse wxMiniProgramLoginOrReg(WxMiniProgramRegRequest wxMiniProgramRegRequest) { try{ @@ -175,6 +182,23 @@ public class UserServiceImpl implements IUserService { baseUserPO.setNickName(phoneNumber); baseUserPO.setRoleId(1); baseUserRepo.saveOrUpdate(baseUserPO); + + if(Objects.nonNull(wxMiniProgramRegRequest.getReferralUserId())){ + LambdaQueryWrapper queryReferralWrapper = new LambdaQueryWrapper<>(); + queryReferralWrapper.eq(BaseUserReferralPO::getUserId, baseUserPO.getId()).last( " limit 1"); + BaseUserReferralPO baseUserReferralPO = baseUserReferralRepo.getOne(queryReferralWrapper); + if(Objects.isNull(baseUserReferralPO)){ + baseUserReferralPO = new BaseUserReferralPO(); + BaseUserPO referralUserPO = baseUserRepo.getById(wxMiniProgramRegRequest.getReferralUserId()); + baseUserReferralPO.setUserId(baseUserPO.getId()); + baseUserReferralPO.setUserPhoneNumber(phoneNumber); + baseUserReferralPO.setReferralUserId(wxMiniProgramRegRequest.getReferralUserId()); + baseUserReferralPO.setReferralUserPhoneNumber(referralUserPO.getPhoneNumber()); + //TODO-获取推荐奖励 + //保存推荐信息 + baseUserReferralRepo.save(baseUserReferralPO); + } + } }else { if(StringUtils.isBlank(baseUserPO.getWechatOpenid())){ baseUserPO.setWechatOpenid(openid); @@ -188,6 +212,7 @@ public class UserServiceImpl implements IUserService { } } + @Transactional(rollbackFor=Exception.class) @Override public LoginResponse alipayMiniProgramLoginOrReg(AlipayMiniProgramRegRequest alipayMiniProgramRegRequest) { try { @@ -211,6 +236,23 @@ public class UserServiceImpl implements IUserService { baseUserPO.setPassword(MD5Utils.md5Hex(phoneNumber, StandardCharsets.UTF_8.name())); baseUserPO.setRoleId(1); baseUserRepo.saveOrUpdate(baseUserPO); + + if(Objects.nonNull(alipayMiniProgramRegRequest.getReferralUserId())){ + LambdaQueryWrapper queryReferralWrapper = new LambdaQueryWrapper<>(); + queryReferralWrapper.eq(BaseUserReferralPO::getUserId, baseUserPO.getId()).last( " limit 1"); + BaseUserReferralPO baseUserReferralPO = baseUserReferralRepo.getOne(queryReferralWrapper); + if(Objects.isNull(baseUserReferralPO)){ + baseUserReferralPO = new BaseUserReferralPO(); + BaseUserPO referralUserPO = baseUserRepo.getById(alipayMiniProgramRegRequest.getReferralUserId()); + baseUserReferralPO.setUserId(baseUserPO.getId()); + baseUserReferralPO.setUserPhoneNumber(phoneNumber); + baseUserReferralPO.setReferralUserId(alipayMiniProgramRegRequest.getReferralUserId()); + baseUserReferralPO.setReferralUserPhoneNumber(referralUserPO.getPhoneNumber()); + //TODO-获取推荐奖励 + //保存推荐信息 + baseUserReferralRepo.save(baseUserReferralPO); + } + } } // 5. 返回登录信息 return getLoginResponse(baseUserPO,MiniProgramTypeEnum.ALIPAY); diff --git a/src/main/resources/mapper/BaseUserReferralMapper.xml b/src/main/resources/mapper/BaseUserReferralMapper.xml new file mode 100644 index 0000000..c509e6c --- /dev/null +++ b/src/main/resources/mapper/BaseUserReferralMapper.xml @@ -0,0 +1,5 @@ + + + + +