Ver Fonte

2026筑境计划-V3版本上线

hanzhengyi há 3 dias atrás
pai
commit
46f98515ac

+ 6 - 0
base-modules/service-system/service-system-biz/pom.xml

@@ -64,6 +64,12 @@
             <artifactId>json</artifactId>
             <version>20210307</version>
         </dependency>
+        <!-- ip2region 本地IP库 -->
+        <dependency>
+            <groupId>org.lionsoul</groupId>
+            <artifactId>ip2region</artifactId>
+            <version>2.7.0</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 7 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/TokenController.java

@@ -16,6 +16,7 @@ import com.usky.system.domain.*;
 import com.usky.system.mapper.SysUserMapper;
 import com.usky.system.model.LoginUser;
 import com.usky.system.service.*;
+import com.usky.system.service.util.IpUtils;
 import com.usky.system.service.vo.LoginBody;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
@@ -154,6 +155,12 @@ public class TokenController {
         return ApiResult.success(tokenService.createToken(sysUser,openId));
     }
 
+    @PostMapping("getIp")
+    public ApiResult<?> getIp() {
+        String clientIp = IpUtils.getClientIp(request);
+        return ApiResult.success(clientIp);
+    }
+
 
     //手机端发送扫码信息,二维码编号,用户名信息
     @GetMapping("getQrCodeResult")

+ 6 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysTenant.java

@@ -127,4 +127,10 @@ public class SysTenant implements Serializable {
      */
     @TableField(exist = false)
     private Boolean isDefault;
+
+    /**
+     * 租户logo
+     */
+    @TableField(exist = false)
+    private String tenantLogo;
 }

+ 2 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysTenantConfigMapper.java

@@ -5,6 +5,7 @@ import com.usky.system.domain.SysMenu;
 import com.usky.system.domain.SysTenantConfig;
 import com.usky.system.service.vo.SysTenantConfigVo;
 import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
 
 import java.util.List;
 
@@ -16,6 +17,7 @@ import java.util.List;
  * @author ya
  * @since 2022-05-06
  */
+@Repository
 public interface SysTenantConfigMapper extends CrudMapper<SysTenantConfig> {
     List<SysTenantConfigVo> getTenantConfig(@Param("url") String url);
 

+ 17 - 2
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserTenantServiceImpl.java

@@ -7,10 +7,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.core.exception.BusinessException;
 import com.usky.system.RemoteDeptService;
 import com.usky.system.domain.SysTenant;
+import com.usky.system.domain.SysTenantConfig;
 import com.usky.system.domain.SysUserRole;
 import com.usky.system.domain.SysUserTenant;
+import com.usky.system.mapper.SysTenantConfigMapper;
 import com.usky.system.mapper.SysUserRoleMapper;
 import com.usky.system.mapper.SysUserTenantMapper;
+import com.usky.system.service.SysTenantConfigService;
 import com.usky.system.service.SysTenantService;
 import com.usky.system.service.SysUserTenantService;
 import com.usky.common.mybatis.core.AbstractCrudService;
@@ -40,6 +43,9 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
     @Autowired
     private SysUserRoleMapper sysUserRoleMapper;
 
+    @Autowired
+    private SysTenantConfigMapper sysTenantConfigMapper;
+
     /**
      * 企业邀请用户
      *
@@ -88,7 +94,9 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
         List<SysUserTenant> userTenants = this.list(queryWrapper);
         List<Integer> tenantIdList = new ArrayList<>();
         List<SysTenant> tenantList = new ArrayList<>();
+        List<SysTenantConfig> tenantConfigList = new ArrayList<>();
         LambdaQueryWrapper<SysTenant> queryWrapper1 = Wrappers.lambdaQuery();
+        LambdaQueryWrapper<SysTenantConfig> queryWrapper2 = Wrappers.lambdaQuery();
         if (CollectionUtils.isNotEmpty(userTenants)) {
             for (int i = 0; i < userTenants.size(); i++) {
                 tenantIdList.add(userTenants.get(i).getTenantId());
@@ -96,13 +104,20 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
             queryWrapper1.in(SysTenant::getId, tenantIdList)
                     .eq(SysTenant::getStatus, 0);
             tenantList = sysTenantService.list(queryWrapper1);
+            queryWrapper2.in(SysTenantConfig::getTenantId, tenantIdList);
+            tenantConfigList = sysTenantConfigMapper.selectList(queryWrapper2);
             if (CollectionUtils.isNotEmpty(tenantList)) {
-                for (int j = 0; j < userTenants.size(); j++) {
-                    for (int k = 0; k < tenantList.size(); k++) {
+                for (int k = 0; k < tenantList.size(); k++) {
+                    for (int j = 0; j < userTenants.size(); j++) {
                         if (userTenants.get(j).getTenantId().equals(tenantList.get(k).getId())){
                             tenantList.get(k).setIsDefault(userTenants.get(j).getIsDefault());
                         }
                     }
+                    for (int l = 0; l < tenantConfigList.size(); l++) {
+                        if (tenantConfigList.get(l).getTenantId().equals(tenantList.get(k).getId())){
+                            tenantList.get(k).setTenantLogo(tenantConfigList.get(l).getMiddleLogo());
+                        }
+                    }
                 }
             }
         }

+ 29 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/IpUtils.java

@@ -0,0 +1,29 @@
+package com.usky.system.service.util;
+
+import javax.servlet.http.HttpServletRequest;
+public class IpUtils {
+    /**
+     * 获取客户端真实IP(适配代理/非代理场景)
+     */
+    public static String getClientIp(HttpServletRequest request) {
+        // 1. 先从代理头获取(Nginx/网关转发时会填充)
+        String ip = request.getHeader("X-Forwarded-For");
+        // 2. 若无X-Forwarded-For,取X-Real-IP(Nginx常用)
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("X-Real-IP");
+        }
+        // 3. 若无反向代理,取原生的REMOTE_ADDR(TCP连接的源IP)
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        // 4. 处理X-Forwarded-For多IP场景(格式:客户端IP, 代理1IP, 代理2IP)
+        if (ip != null && ip.contains(",")) {
+            ip = ip.split(",")[0].trim(); // 取第一个IP(客户端真实IP)
+        }
+        // 5. 本地测试时的IP处理(127.0.0.1/0:0:0:0:0:0:0:1)
+        if ("0:0:0:0:0:0:0:1".equals(ip)) {
+            ip = "127.0.0.1";
+        }
+        return ip;
+    }
+}

BIN
base-modules/service-system/service-system-biz/src/main/resources/ip2region_v4.xdb