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 @@
+
+
+
+
+