Просмотр исходного кода

fix: register 设 tenantId + deploy.sh 网络修正

- UserService.register: 通过邀请码创建者推导 tenantId,修复公开注册接口因无认证上下文导致 tenant_id NOT NULL 约束违反

- InvitationCodeService.validate: 返回值 void→InvitationCodeEntity,避免调用方重复查询

- deploy.sh / ops.md: 网络 app-net→deploy_app-tier,与 PG/Redis 实际网络对齐
alphaH 3 недель назад
Родитель
Сommit
ccb2535a82

+ 1 - 1
deploy.sh

@@ -9,7 +9,7 @@ ENDOFDOCKERFILE
 docker build --no-cache -t pay:latest .
 docker stop java-backend 2>/dev/null || true
 docker rm java-backend 2>/dev/null || true
-docker run -d --name java-backend --network app-net -p 8001:8001 \
+docker run -d --name java-backend --network deploy_app-tier -p 8001:8001 \
   -e SPRING_PROFILES_ACTIVE=prod -e JAVA_OPTS="-Xms256m -Xmx512m" \
   -e SPRING_DATASOURCE_DRUID_URL=jdbc:postgresql://postgres:5432/payment_platform_java?currentSchema=public \
   -e SPRING_DATASOURCE_DRUID_USERNAME=admin -e SPRING_DATASOURCE_DRUID_PASSWORD=xjz#123321 \

+ 1 - 1
docs/ops.md

@@ -16,7 +16,7 @@
 ```bash
 docker run -d --name java-backend \
   -p 8001:8001 \
-  --network payment-platform_app-tier \
+  --network deploy_app-tier \
   -e TZ=Asia/Shanghai \
   -e SPRING_PROFILES_ACTIVE=prod \
   -e JAVA_OPTS="-Xms256m -Xmx512m" \

+ 3 - 2
java/src/main/java/com/payment/platform/module/system/invite/service/InvitationCodeService.java

@@ -116,12 +116,13 @@ public class InvitationCodeService {
     }
 
     /**
-     * 校验邀请码是否存在且未使用(预检,调用方应在用户创建前调用
+     * 校验邀请码是否存在且未使用,返回邀请码实体(供调用方获取 createdBy 等字段
      */
-    public void validate(String code) {
+    public InvitationCodeEntity validate(String code) {
         InvitationCodeEntity entity = invitationCodeMapper.selectByCode(code);
         if (entity == null) throw new BusinessException(400, "邀请码无效");
         if ("1".equals(entity.getStatus())) throw new BusinessException(400, "邀请码已被使用");
+        return entity;
     }
 
     /**

+ 16 - 2
java/src/main/java/com/payment/platform/module/system/user/service/UserService.java

@@ -16,6 +16,7 @@ import com.payment.platform.module.system.position.entity.PositionEntity;
 import com.payment.platform.module.system.position.mapper.PositionMapper;
 import com.payment.platform.module.system.role.entity.RoleEntity;
 import com.payment.platform.module.system.role.mapper.RoleMapper;
+import com.payment.platform.module.system.invite.entity.InvitationCodeEntity;
 import com.payment.platform.module.system.tenant.entity.TenantEntity;
 import com.payment.platform.module.system.tenant.mapper.TenantMapper;
 import com.payment.platform.module.system.user.dto.*;
@@ -268,8 +269,20 @@ public class UserService {
         if (StrUtil.isBlank(invitationCode))
             throw new BusinessException(400, "邀请码不能为空");
 
-        // 先校验邀请码有效性(创建用户之前)
-        invitationCodeService.validate(invitationCode);
+        // 先校验邀请码有效性,同时获取邀请码实体(用于推导租户)
+        InvitationCodeEntity codeEntity = invitationCodeService.validate(invitationCode);
+
+        // 通过邀请码创建者推导租户 ID
+        Long tenantId = null;
+        if (codeEntity.getCreatedBy() != null) {
+            UserEntity creator = userMapper.selectById(codeEntity.getCreatedBy());
+            if (creator != null && creator.getTenantId() != null) {
+                tenantId = creator.getTenantId();
+            }
+        }
+        if (tenantId == null) {
+            throw new BusinessException(500, "邀请码未关联租户,无法注册");
+        }
 
         // 检查用户名是否已存在(按 username 或 mobile)
         UserEntity existByUsername = userMapper.selectOne(
@@ -292,6 +305,7 @@ public class UserService {
         entity.setName(StrUtil.isNotBlank(name) ? name : username);
         entity.setStatus("0");
         entity.setIsSuperuser(false);
+        entity.setTenantId(tenantId);
         userMapper.insert(entity);
 
         // 分配默认角色 (role_id=1)