2
0

38 Коммиты 09c077b73c ... 09a867e874

Автор SHA1 Сообщение Дата
  fuyuchuan 09a867e874 修改file模块pom,解决引用报错 1 день назад
  fuyuchuan 0882af7c2c Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 2 дней назад
  hanzhengyi bb738b6c2f Merge branch 'system-zyj' of uskycloud/usky-cloud into master 2 дней назад
  james e0e251168d 优化新增-参数配置、修改-参数配置两个接口,修改唯一性校验逻辑 2 дней назад
  hanzhengyi 428bb003b4 Merge branch 'system-zyj' of uskycloud/usky-cloud into master 3 дней назад
  james c7fcfcdfd2 优化获取用户信息逻辑 4 дней назад
  james 87a28c9d58 优化新增参数配置、修改参数配置、删除参数配置和刷新参数缓存四个接口,增加租户Id的处理逻辑 4 дней назад
  hanzhengyi 218d3d8dbc Merge branch 'system-zyj' of uskycloud/usky-cloud into master 1 неделя назад
  james 57b36bc17c 排查个人信息界面报错,优化个人信息接口,增加查询记录非空的判断 1 неделя назад
  james add7ca06b0 优化租户管理-租户单位配置-列表查询接口,在接口返回类中新增涉及领域(1、消防 2、楼宇 3、人防 4、能耗)字段 2 недель назад
  james 43377b5855 Merge branch 'system-zyj' of http://47.111.81.118:3000/uskycloud/usky-cloud into system-zyj 2 недель назад
  james fc0096d0a7 2、在sys_tenant租户表中新增涉及领域字段; 2 недель назад
  fuyuchuan b22d26cf8b Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 1 месяц назад
  james 1e0fd53d4f 在添加租户或克隆租户时新增一级项目空间信息,删除租户时对应删除这个租户的项目空间信息; 2 месяцев назад
  hanzhengyi 6278f197a1 Merge branch 'fhs' of uskycloud/usky-cloud into master 2 месяцев назад
  fanghuisheng 3959660c53 Merge branch 'develop' of http://47.111.81.118:3000/uskycloud/usky-cloud into fhs 2 месяцев назад
  fanghuisheng 86c81e3013 人员管理逻辑代码完善 2 месяцев назад
  hanzhengyi e0f72ff43e Merge branch 'han' of uskycloud/usky-cloud into master 3 месяцев назад
  hanzhengyi 50c94a8efc 去除私包 3 месяцев назад
  james 0279a505b6 解决冲突 3 месяцев назад
  hanzhengyi 314676ec83 Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud 3 месяцев назад
  gez 72fe261703 Merge branch 'fhs' of uskycloud/usky-cloud into master 3 месяцев назад
  hanzhengyi 069761d151 调整优化菜单查询逻辑 3 месяцев назад
  james 8567ad642e 调整菜单编辑功能权限配置,管理员配置菜单昵称后租户下面所有用户都可以统一展示这个菜单昵称 4 месяцев назад
  fanghuisheng 657ac7d79e 人员管理新增部门名称回显功能 4 месяцев назад
  fanghuisheng b67990b2fd 人员管理增删改查功能完成 4 месяцев назад
  hanzhengyi bcc529ff6a 去除私包配置 4 месяцев назад
  hanzhengyi aa8020ff55 Merge branch 'han' 4 месяцев назад
  hanzhengyi 46f98515ac 2026筑境计划-V3版本上线 4 месяцев назад
  hanzhengyi 81deaa4ce3 应用、菜单增加类型字段 5 месяцев назад
  fuyuchuan d825b8334b Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 5 месяцев назад
  gez 795687733a Merge branch 'system-zjy' of uskycloud/usky-cloud into master 6 месяцев назад
  zhaojinyu 636b7239a1 修改阿里云短信至yaml文件 6 месяцев назад
  fuyuchuan 3eb3145058 Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev 7 месяцев назад
  gez e774b0b2e0 Merge branch 'han' of uskycloud/usky-cloud into master 9 месяцев назад
  hanzhengyi cdf36ccd11 调整切换默认租户及登录验证 9 месяцев назад
  hanzhengyi 4d3f8c2895 Merge branch 'han' of uskycloud/usky-cloud into master 9 месяцев назад
  hanzhengyi 0621e28b49 修改用户默认租户 9 месяцев назад
45 измененных файлов с 871 добавлено и 66 удалено
  1. 5 0
      base-modules/service-file/pom.xml
  2. 25 0
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysPerson.java
  3. 24 0
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysPersonVo.java
  4. 0 1
      base-modules/service-system/service-system-biz/pom.xml
  5. 11 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SendSmsController.java
  6. 3 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysConfigController.java
  7. 3 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysMenuController.java
  8. 226 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysPersonController.java
  9. 3 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysProfileController.java
  10. 16 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysUserTenantController.java
  11. 16 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/TokenController.java
  12. 15 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysConfig.java
  13. 7 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysMenu.java
  14. 47 2
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPerson.java
  15. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPlatform.java
  16. 17 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysTenant.java
  17. 12 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysUser.java
  18. 1 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysConfigMapper.java
  19. 8 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysDeptMapper.java
  20. 2 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysTenantConfigMapper.java
  21. 2 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysTenantMapper.java
  22. 8 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysDeptService.java
  23. 13 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysPersonService.java
  24. 12 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysUserTenantService.java
  25. 15 8
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysConfigServiceImpl.java
  26. 8 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysDeptServiceImpl.java
  27. 16 12
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysMenuServiceImpl.java
  28. 129 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPersonServiceImpl.java
  29. 1 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPlatformServiceImpl.java
  30. 7 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysTenantServiceImpl.java
  31. 9 3
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java
  32. 70 10
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserTenantServiceImpl.java
  33. 29 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/IpUtils.java
  34. 14 3
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/MetaVo.java
  35. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformMenuVo.java
  36. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformRouterVo.java
  37. 25 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPersonVo.java
  38. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPlatformVo.java
  39. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysTenantTwoVo.java
  40. 10 1
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysConfigMapper.xml
  41. 9 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysDeptMapper.xml
  42. 15 5
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysMenuMapper.xml
  43. 5 2
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPersonMapper.xml
  44. 1 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPlatformMapper.xml
  45. 7 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysTenantMapper.xml

+ 5 - 0
base-modules/service-file/pom.xml

@@ -104,6 +104,10 @@
                         <goals>
                             <goal>repackage</goal>
                         </goals>
+                        <configuration>
+                            <!-- 新增:给启动包加后缀,保留原始普通jar用于依赖,解决外部引用报错问题-->
+                            <classifier>exec</classifier>
+                        </configuration>
                     </execution>
                 </executions>
             </plugin>
@@ -122,6 +126,7 @@
                     <!--                    </excludes>-->
                 </configuration>
             </plugin>
+
         </plugins>
     </build>
 

+ 25 - 0
base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysPerson.java

@@ -106,6 +106,31 @@ public class SysPerson implements Serializable {
      */
     private Date updateTime;
 
+    /**
+     * 图片数据(base64编码)
+     */
+    private String faceBase;
+
+    /**
+     * 验证次数(默认0)
+     */
+    private Integer vefNum;
+
+    /**
+     * 人脸备注
+     */
+    private String remark;
+
+    /**
+     * 人脸状态(0=可用,1=不可用)
+     */
+    private Integer faceStatus;
+
+    /**
+     * 卡号
+     */
+    private String cardNum;
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 24 - 0
base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysPersonVo.java

@@ -105,5 +105,29 @@ public class SysPersonVo implements Serializable {
      */
     private LocalDateTime updateTime;
 
+    /**
+     * 图片数据(base64编码)
+     */
+    private String faceBase;
+
+    /**
+     * 验证次数(默认0)
+     */
+    private Integer vefNum;
+
+    /**
+     * 人脸备注
+     */
+    private String remark;
+
+    /**
+     * 人脸状态(0=可用,1=不可用)
+     */
+    private Integer faceStatus;
+
+    /**
+     * 卡号
+     */
+    private String cardNum;
 
 }

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

@@ -76,7 +76,6 @@
             <artifactId>pjl-comp-filter</artifactId>
             <version>1.7</version>
         </dependency>
-
     </dependencies>
 
     <build>

+ 11 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SendSmsController.java

@@ -16,6 +16,7 @@ import com.usky.system.domain.SysMobileTenantConfig;
 import com.usky.system.domain.SysUser;
 import com.usky.system.mapper.SysUserMapper;
 import com.usky.system.service.ISysUserService;
+import org.springframework.beans.factory.annotation.Value;
 import com.usky.system.service.SysMobileTenantConfigService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -47,13 +48,22 @@ public class SendSmsController {
     @Autowired
     private ISysUserService sysUserService;
 
+    @Value("${sms.ali.region-id}")
+    private String regionId;
+
+    @Value("${sms.ali.access-key-id}")
+    private String accessKeyId;
+
+    @Value("${sms.ali.access-key-secret}")
+    private String accessKeySecret;
+
     @GetMapping("/noteSending")
     public ApiResult<Void> noteSending(@RequestParam(value = "tenantId" ,required = false) Integer tenantId,@RequestParam(value = "phone") String phone) {
         if((tenantId != null) && !StringUtils.isBlank(phone)){
             sysUserService.getAppUserInfo(null, tenantId, phone,null);
         }
 
-        DefaultProfile profile = DefaultProfile.getProfile("cn-beijing", "LTAI9WERPIFIlHDg", "p7SQ0rYpraebcdoJ0l3tOtYmmgrR4q");
+        DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
         String code = String.valueOf(new Random().nextInt(1000000));
         redisHelper.set(phone,code,300,TimeUnit.SECONDS);//key为手机号,value为验证码存储
         IAcsClient client = new DefaultAcsClient(profile);

+ 3 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysConfigController.java

@@ -64,11 +64,12 @@ public class SysConfigController extends BaseController
     @PostMapping
     public ApiResult add(@Validated @RequestBody SysConfig config)
     {
+        config.setCreateBy(SecurityUtils.getUsername());
+        config.setTenantId(SecurityUtils.getTenantId());
         if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
         {
             return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
         }
-        config.setCreateBy(SecurityUtils.getUsername());
         return toAjax(configService.insertConfig(config));
     }
 
@@ -79,6 +80,7 @@ public class SysConfigController extends BaseController
     @PutMapping
     public ApiResult edit(@Validated @RequestBody SysConfig config)
     {
+        config.setTenantId(SecurityUtils.getTenantId());
         if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
         {
             return ApiResult.error(BusinessErrorCode.BIZ_BUSINESS_ERROR.getCode(), "修改参数'" + config.getConfigName() + "'失败,参数键名已存在");

+ 3 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysMenuController.java

@@ -17,6 +17,7 @@ import com.usky.system.domain.constants.UserConstants;
 import com.usky.system.model.LoginUser;
 import com.usky.system.service.ISysMenuService;
 import com.usky.system.service.ISysUserService;
+import com.usky.system.service.vo.PlatformRouterVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -176,7 +177,8 @@ public class SysMenuController extends BaseController
     @GetMapping("getRouters1")
     public ApiResult getRouters1()
     {
-        return ApiResult.success(menuService.buildPlatformMenus());
+        List<PlatformRouterVo> list = menuService.buildPlatformMenus();
+        return ApiResult.success(list);
     }
 
     /**

+ 226 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysPersonController.java

@@ -1,9 +1,31 @@
 package com.usky.system.controller.web;
 
 
-import org.springframework.web.bind.annotation.RequestMapping;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.usky.common.core.exception.BusinessException;
+import com.usky.common.core.bean.ApiResult;
+import com.usky.system.controller.web.page.TableDataInfo;
+import com.usky.common.security.utils.SecurityUtils;
+import com.usky.system.domain.SysPerson;
+import com.usky.system.domain.SysUser;
+import com.usky.system.domain.SysUserPerson;
+import com.usky.system.service.ISysUserService;
+import com.usky.system.service.SysPersonService;
+import com.usky.system.service.SysUserPersonService;
+import com.usky.common.core.util.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.BeanUtils;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
 
-import org.springframework.stereotype.Controller;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -13,9 +35,209 @@ import org.springframework.stereotype.Controller;
  * @author JCB
  * @since 2022-08-22
  */
-@Controller
+@RestController
 @RequestMapping("/sysPerson")
-public class SysPersonController {
+public class SysPersonController extends BaseController {
 
+    @Autowired
+    private SysPersonService sysPersonService;
+    @Autowired
+    private SysUserPersonService sysUserPersonService;
+    @Autowired
+    private ISysUserService sysUserService;
+
+    /**
+     * 人员列表(分页)
+     */
+    @GetMapping("/list")
+    public ApiResult<TableDataInfo> list(SysPerson person) {
+        startPage();
+        // 支持 fullName 模糊查询;其他字段保持按传入条件精确匹配
+        Long filterDeptId = person != null ? person.getDeptId() : null;
+
+        SysPerson queryEntity = new SysPerson();
+        if (person != null) {
+            BeanUtils.copyProperties(person, queryEntity);
+            // fullName 用 like 查询,避免 Wrappers.query(entity) 产生 fullName=xxx 的精确条件
+            queryEntity.setFullName(null);
+            // 部门、岗位以关联用户为准,不作为人员表列条件;部门筛选见下方按用户 dept_id 关联
+            queryEntity.setDeptId(null);
+            queryEntity.setPostId(null);
+        }
+        QueryWrapper<SysPerson> queryWrapper = Wrappers.query(queryEntity);
+        queryWrapper.lambda()
+                .like(person != null && StringUtils.isNotBlank(person.getFullName()),
+                        SysPerson::getFullName, person.getFullName());
+
+        // 按部门筛选:关联用户的 dept_id = filterDeptId
+        if (filterDeptId != null) {
+            LambdaQueryWrapper<SysUser> userQuery = Wrappers.<SysUser>lambdaQuery()
+                    .eq(SysUser::getDeptId, filterDeptId)
+                    .eq(SysUser::getDelFlag, "0");
+            Integer tenantId = SecurityUtils.getTenantId();
+            if (tenantId != null) {
+                userQuery.eq(SysUser::getTenantId, tenantId);
+            }
+            List<SysUser> deptUsers = sysUserService.list(userQuery);
+            if (deptUsers == null || deptUsers.isEmpty()) {
+                queryWrapper.apply("1 = 0");
+            } else {
+                List<Long> userIds = deptUsers.stream()
+                        .map(SysUser::getUserId)
+                        .filter(Objects::nonNull)
+                        .distinct()
+                        .collect(Collectors.toList());
+                List<SysUserPerson> deptRelations = sysUserPersonService.list(
+                        Wrappers.<SysUserPerson>lambdaQuery()
+                                .in(SysUserPerson::getUserId, userIds)
+                );
+                if (deptRelations == null || deptRelations.isEmpty()) {
+                    queryWrapper.apply("1 = 0");
+                } else {
+                    List<Integer> deptPersonIds = deptRelations.stream()
+                            .map(SysUserPerson::getPersonId)
+                            .filter(Objects::nonNull)
+                            .distinct()
+                            .collect(Collectors.toList());
+                    queryWrapper.lambda().in(SysPerson::getId, deptPersonIds);
+                }
+            }
+        }
+
+        List<SysPerson> list = sysPersonService.list(queryWrapper);
+
+        // 回显 userId,以及通过 userId 回显部门、岗位
+        if (list != null && !list.isEmpty()) {
+            List<Integer> personIds = list.stream()
+                    .map(SysPerson::getId)
+                    .filter(Objects::nonNull)
+                    .collect(Collectors.toList());
+            if (!personIds.isEmpty()) {
+                List<SysUserPerson> relations = sysUserPersonService.list(
+                        Wrappers.<SysUserPerson>lambdaQuery()
+                                .in(SysUserPerson::getPersonId, personIds)
+                );
+                final Map<Integer, Long> personUserMap;
+                if (relations != null && !relations.isEmpty()) {
+                    personUserMap = relations.stream()
+                            .collect(Collectors.toMap(
+                                    SysUserPerson::getPersonId,
+                                    SysUserPerson::getUserId,
+                                    (u1, u2) -> u1
+                            ));
+                    list.forEach(p -> {
+                        Long userId = personUserMap.get(p.getId());
+                        if (userId != null) {
+                            p.setUserId(userId);
+                        }
+                    });
+                } else {
+                    personUserMap = new HashMap<>();
+                }
+                sysPersonService.fillDeptAndPostForList(list, personUserMap);
+            }
+        }
+        return ApiResult.success(getDataTable(list));
+    }
+
+    /**
+     * 根据主键获取人员详情
+     */
+    @GetMapping("/{id}")
+    public ApiResult<SysPerson> getInfo(@PathVariable("id") Integer id) {
+        SysPerson person = sysPersonService.getById(id);
+        if (person != null) {
+            Long userId = null;
+            SysUserPerson userPerson = sysUserPersonService.getOne(
+                    Wrappers.<SysUserPerson>lambdaQuery()
+                            .eq(SysUserPerson::getPersonId, id)
+                            .last("limit 1")
+            );
+            if (userPerson != null) {
+                userId = userPerson.getUserId();
+                person.setUserId(userId);
+            }
+            sysPersonService.fillDeptAndPostFromUser(person, userId);
+        }
+        return ApiResult.success(person);
+    }
+
+    /**
+     * 新增人员并绑定用户
+     */
+    @PostMapping
+    @Transactional
+    public ApiResult<Void> add(@RequestBody SysPerson person) {
+        Long userId = person.getUserId();
+        if (Objects.isNull(userId)) {
+            throw new BusinessException("lack necessary param:userId is required!");
+        }
+        // 校验账户是否已被其他人员绑定
+        SysUserPerson existBind = sysUserPersonService.getOne(
+                Wrappers.<SysUserPerson>lambdaQuery()
+                        .eq(SysUserPerson::getUserId, userId)
+                        .last("limit 1")
+        );
+        if (existBind != null) {
+            throw new BusinessException("此账户已被其它人员绑定,请解绑后重试!");
+        }
+        // 先保存人员信息
+        sysPersonService.save(person);
+        // 新增用户-人员关联
+        SysUserPerson userPerson = new SysUserPerson();
+        userPerson.setUserId(userId);
+        userPerson.setPersonId(person.getId());
+        userPerson.setIsLoginNotify(0);
+        sysUserPersonService.save(userPerson);
+        return ApiResult.success();
+    }
+
+    /**
+     * 修改人员并更新绑定用户
+     */
+    @PutMapping
+    @Transactional
+    public ApiResult<Void> edit(@RequestBody SysPerson person) {
+        Long userId = person.getUserId();
+        if (Objects.isNull(userId)) {
+            throw new BusinessException("lack necessary param:userId is required!");
+        }
+        // 校验账户是否已被其他人员绑定(排除当前人员本身)
+        SysUserPerson existBind = sysUserPersonService.getOne(
+                Wrappers.<SysUserPerson>lambdaQuery()
+                        .eq(SysUserPerson::getUserId, userId)
+                        .last("limit 1")
+        );
+        if (existBind != null && !Objects.equals(existBind.getPersonId(), person.getId())) {
+            throw new BusinessException("此账户已被其它人员绑定,请解绑后重试!");
+        }
+        // 更新人员信息
+        sysPersonService.updateById(person);
+        // 先删除原有关联,再按当前传入的 userId 重新绑定
+        QueryWrapper<SysUserPerson> wrapper = Wrappers.query();
+        wrapper.eq("person_id", person.getId());
+        sysUserPersonService.remove(wrapper);
+
+        SysUserPerson userPerson = new SysUserPerson();
+        userPerson.setUserId(userId);
+        userPerson.setPersonId(person.getId());
+        userPerson.setIsLoginNotify(0);
+        sysUserPersonService.save(userPerson);
+        return ApiResult.success();
+    }
+
+    /**
+     * 删除人员(支持批量,逗号分隔),并解绑与用户的关联
+     */
+    @DeleteMapping("/{ids}")
+    public ApiResult<Void> remove(@PathVariable("ids") Integer[] ids) {
+        // 先删除关联关系
+        QueryWrapper<SysUserPerson> wrapper = Wrappers.query();
+        wrapper.in("person_id", Arrays.asList(ids));
+        sysUserPersonService.remove(wrapper);
+        // 再删除人员
+        sysPersonService.removeByIds(Arrays.asList(ids));
+        return ApiResult.success();
+    }
 }
 

+ 3 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysProfileController.java

@@ -50,7 +50,9 @@ public class SysProfileController extends BaseController {
                 .eq(SysUserPerson::getUserId, user.getUserId())
                 .select(SysUserPerson::getIsLoginNotify)
                 .one();
-        user.setIsLoginNotify(one.getIsLoginNotify());
+        if(one != null) {
+            user.setIsLoginNotify(one.getIsLoginNotify());
+        }
 
         Map<String, Object> map = new HashMap<>();
         map.put("user", user);

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

@@ -5,10 +5,14 @@ import com.usky.common.core.bean.ApiResult;
 import com.usky.common.core.exception.BusinessErrorCode;
 import com.usky.common.log.annotation.Log;
 import com.usky.common.log.enums.BusinessType;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.system.domain.SysTenant;
+import com.usky.system.domain.SysUser;
 import com.usky.system.domain.SysUserTenant;
 import com.usky.system.service.SysUserTenantService;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
@@ -62,5 +66,17 @@ public class SysUserTenantController extends BaseController {
     {
         return ApiResult.success(sysUserTenantService.getTenantByUser(userId));
     }
+
+    /**
+     * 修改用户默认租户
+     */
+    @Log(title = "修改用户默认租户", businessType = BusinessType.UPDATE)
+    @Transactional
+    @PutMapping
+    public ApiResult<Void> edit(@Validated @RequestBody SysUserTenant userTenant)
+    {
+        sysUserTenantService.updateUserTenant(userTenant);
+        return ApiResult.success();
+    }
 }
 

+ 16 - 1
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.*;
@@ -58,6 +59,9 @@ public class TokenController {
     @Autowired
     private MceSettingService mceSettingService;
 
+    @Autowired
+    private SysUserTenantService sysUserTenantService;
+
     @Resource
     private HttpServletRequest request;
     @Resource
@@ -78,9 +82,14 @@ public class TokenController {
         // 用户登录
         SysUser userInfo = sysLoginService.appLogin(form.getUsername(), form.getPassword(), form.getTenantId(),
                 form.getPhone(), form.getVerify(), form.getMethod());
+        Integer isDefaulTenant = sysUserTenantService.getIsDefaultByUser(userInfo.getUserId());
         LoginUser sysUser = new LoginUser();
         SysUserVO sysUserVO = BeanMapperUtils.map(userInfo, SysUserVO.class);
-        sysUserVO.setTenantId(userInfo.getTenantId());
+        if (null != form.getMethod() && form.getMethod().equals("switch")){
+            sysUserVO.setTenantId(userInfo.getTenantId());
+        }else {
+            sysUserVO.setTenantId(isDefaulTenant);
+        }
         sysUser.setSysUser(sysUserVO);
         Set<String> rolePermission = permissionService.getRolePermission(userInfo.getUserId());
         sysUser.setRoles(rolePermission);
@@ -146,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")

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

@@ -43,6 +43,21 @@ public class SysConfig extends BaseEntity
         this.configId = configId;
     }
 
+    /**
+     * 租户ID
+     */
+    private Integer tenantId;
+
+    public Integer getTenantId()
+    {
+        return tenantId;
+    }
+
+    public void setTenantId(Integer tenantId)
+    {
+        this.tenantId = tenantId;
+    }
+
     @NotBlank(message = "参数名称不能为空")
     @Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
     public String getConfigName()

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

@@ -57,6 +57,9 @@ public class SysMenu extends BaseEntity
     /** 类型(M目录 C菜单 F按钮) */
     private String menuType;
 
+    /** 类型(1.基础功能,2.业务功能) */
+    private Integer menuMold;
+
     /** 显示状态(0显示 1隐藏) */
     private String visible;
     
@@ -195,6 +198,10 @@ public class SysMenu extends BaseEntity
         this.menuType = menuType;
     }
 
+    public Integer getMenuMold() { return menuMold; }
+
+    public void setMenuMold(Integer menuMold) { this.menuMold = menuMold; }
+
     public String getVisible()
     {
         return visible;

+ 47 - 2
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPerson.java

@@ -1,6 +1,7 @@
 package com.usky.system.domain;
 
 import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
@@ -64,13 +65,15 @@ public class SysPerson implements Serializable {
     private String linkPhone;
 
     /**
-     * 岗位ID
+     * 岗位ID(来自关联用户,不入库)
      */
+    @TableField(exist = false)
     private Long postId;
 
     /**
-     * 部门ID
+     * 部门ID(来自关联用户,不入库)
      */
+    @TableField(exist = false)
     private Long deptId;
 
     /**
@@ -113,5 +116,47 @@ public class SysPerson implements Serializable {
      */
     private Date updateTime;
 
+    /**
+     * 图片数据(base64编码)
+     */
+    private String faceBase;
+
+    /**
+     * 验证次数(默认0)
+     */
+    private Integer vefNum;
+
+    /**
+     * 人脸备注
+     */
+    private String remark;
+
+    /**
+     * 人脸状态(0=可用,1=不可用)
+     */
+    private Integer faceStatus;
+
+    /**
+     * 卡号
+     */
+    private String cardNum;
+
+    /**
+     * 关联的用户ID(非持久化字段,仅用于回显)
+     */
+    @TableField(exist = false)
+    private Long userId;
+
+    /**
+     * 部门名称(非持久化字段,仅用于回显)
+     */
+    @TableField(exist = false)
+    private String deptName;
+
+    /**
+     * 岗位名称(来自关联用户,不入库)
+     */
+    @TableField(exist = false)
+    private String postName;
 
 }

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

@@ -56,6 +56,11 @@ public class SysPlatform implements Serializable {
      */
     private Integer orderNum;
 
+    /**
+     * 应用类型(1.基础功能,2.业务功能)
+     */
+    private Integer platformType;
+
     /**
      * 创建者
      */

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

@@ -116,9 +116,26 @@ public class SysTenant implements Serializable {
      */
     private String systemName;
 
+    /**
+     * 涉及领域(1、消防 2、楼宇 3、人防 4、能耗)
+     */
+    private String field;
+
     /**
      * 原租户Id
      */
     @TableField(exist = false)
     private Integer originalTenantId;
+
+    /**
+     * 是否为默认租户(默认0; 0:否,1:是)
+     */
+    @TableField(exist = false)
+    private Boolean isDefault;
+
+    /**
+     * 租户logo
+     */
+    @TableField(exist = false)
+    private String tenantLogo;
 }

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

@@ -13,6 +13,7 @@ import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.Size;
 import java.util.Date;
 import java.util.List;
+import java.util.Map;
 
 
 /**
@@ -24,6 +25,17 @@ public class SysUser extends BaseEntity
 {
     private static final long serialVersionUID = 1L;
 
+    /**
+     * 与 BaseEntity 同名字段:MyBatis-Plus 按子类优先收集字段,此处显式 {@code exist = false},
+     * 避免仅依赖父类 private 字段注解时仍生成 {@code search_value}/{@code params} 列。
+     * 读写仍使用继承自 BaseEntity 的 getter/setter(操作父类字段)。
+     */
+    @TableField(exist = false)
+    private String searchValue;
+
+    @TableField(exist = false)
+    private Map<String, Object> params;
+
     /** 用户ID */
     @TableId
     private Long userId;

+ 1 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysConfigMapper.java

@@ -38,7 +38,7 @@ public interface SysConfigMapper extends CrudMapper<SysConfig>
      * @param configKey 参数键名
      * @return 参数配置信息
      */
-    public SysConfig checkConfigKeyUnique(@Param("configKey") String configKey);
+    public SysConfig checkConfigKeyUnique(@Param("configKey") String configKey, @Param("tenantId") Integer tenantId);
 
     /**
      * 新增参数配置

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

@@ -46,6 +46,14 @@ public interface SysDeptMapper extends BaseMapper<SysDept>
      */
     public SysDept selectDeptById(@Param("deptId") Long deptId);
 
+    /**
+     * 根据部门ID列表批量查询部门信息
+     *
+     * @param deptIds 部门ID列表
+     * @return 部门信息列表
+     */
+    public List<SysDept> selectDeptByIds(@Param("deptIds") List<Long> deptIds);
+
     /**
      * 根据ID查询所有子部门
      * 

+ 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);
 

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

@@ -50,8 +50,10 @@ public interface SysTenantMapper extends CrudMapper<SysTenant> {
     List<SysUserRole> selectSysUserRoleList(@Param("originalTenantId") Integer originalTenantId, @Param("UserId") long UserId);
     void cloneSysRoleMenu(@Param("originalRoleId") long originalRoleId,@Param("roleId") long roleId);
     void insertSysUserRole(@Param("UserId") long UserId,@Param("roleId") long roleId,@Param("tenantId") long tenantId);
+    void insertBaseSpace(@Param("tenantName") String tenantName,@Param("tenantId") long tenantId);
 
     void delSysTenant(@Param("tenantId") Integer tenantId);
+    void delBaseSpace(@Param("tenantId") Integer tenantId);
     void delSysDept(@Param("tenantId") Integer tenantId);
     void delSysUser(@Param("tenantId") Integer tenantId);
     void delSysUserTenant(@Param("tenantId") Integer tenantId);

+ 8 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysDeptService.java

@@ -70,6 +70,14 @@ public interface ISysDeptService extends IService<SysDept>
      */
     public SysDept selectDeptById(Long deptId);
 
+    /**
+     * 根据部门ID列表批量查询部门信息
+     *
+     * @param deptIds 部门ID列表
+     * @return 部门信息列表
+     */
+    public List<SysDept> selectDeptByIds(List<Long> deptIds);
+
     /**
      * 根据ID查询所有子部门(正常状态)
      * 

+ 13 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysPersonService.java

@@ -3,6 +3,9 @@ package com.usky.system.service;
 import com.usky.system.domain.SysPerson;
 import com.usky.common.mybatis.core.CrudService;
 
+import java.util.List;
+import java.util.Map;
+
 /**
  * <p>
  * 人员信息 服务类
@@ -18,4 +21,14 @@ public interface SysPersonService extends CrudService<SysPerson> {
      * @return
      */
     SysPerson getsysPerson(Long userid);
+
+    /**
+     * 根据 userId 从 sys_user / 部门 / 岗位 填充人员的 dept、post 展示字段;userId 为空或查无用户时置为 null。
+     */
+    void fillDeptAndPostFromUser(SysPerson person, Long userId);
+
+    /**
+     * 批量填充列表中人员的部门、岗位(personId -> userId 由调用方传入)。
+     */
+    void fillDeptAndPostForList(List<SysPerson> list, Map<Integer, Long> personIdToUserId);
 }

+ 12 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysUserTenantService.java

@@ -3,6 +3,7 @@ package com.usky.system.service;
 import com.usky.system.domain.SysTenant;
 import com.usky.system.domain.SysUserTenant;
 import com.usky.common.mybatis.core.CrudService;
+import com.usky.system.service.vo.TenantPlatformVo;
 
 import java.util.List;
 
@@ -20,7 +21,7 @@ public interface SysUserTenantService extends CrudService<SysUserTenant> {
      *
      * @param sysUserTenant
      */
-    public void insertInviteUser(SysUserTenant sysUserTenant);
+    void insertInviteUser(SysUserTenant sysUserTenant);
 
     /**
      * 企业解绑用户
@@ -28,15 +29,22 @@ public interface SysUserTenantService extends CrudService<SysUserTenant> {
      * @param tenantId 租户ID
      * @param userId 用户ID
      */
-    public void deleteUserTenant(Integer tenantId,Long userId);
+    void deleteUserTenant(Integer tenantId,Long userId);
 
     /**
      * 根据用户查询企业下拉框
      */
-    public List<SysTenant> getTenantByUser(Long userId);
+    List<SysTenant> getTenantByUser(Long userId);
 
     /**
      * 根据用户查询绑定状态
      */
-    public Boolean getIdByUser(Integer tenantId,Long userId);
+    Boolean getIdByUser(Integer tenantId,Long userId);
+
+    /**
+     * 根据用户查询默认租户ID
+     */
+    Integer getIsDefaultByUser(Long userId);
+
+    void updateUserTenant(SysUserTenant userTenant);
 }

+ 15 - 8
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysConfigServiceImpl.java

@@ -7,6 +7,7 @@ import com.usky.common.core.util.Convert;
 import com.usky.common.core.util.StringUtils;
 import com.usky.common.mybatis.core.AbstractCrudService;
 import com.usky.common.redis.core.RedisHelper;
+import com.usky.common.security.utils.SecurityUtils;
 import com.usky.system.domain.SysConfig;
 import com.usky.system.domain.constants.UserConstants;
 import com.usky.system.mapper.SysConfigMapper;
@@ -65,17 +66,20 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
     @Override
     public String selectConfigByKey(String configKey)
     {
-        String configValue = Convert.toStr(redisHelper.get(getCacheKey(configKey)));
+        Integer tenantId = SecurityUtils.getTenantId();
+        String configKey1 = configKey+tenantId;
+        String configValue = Convert.toStr(redisHelper.get(getCacheKey(configKey1)));
         if (StringUtils.isNotEmpty(configValue))
         {
             return configValue;
         }
         SysConfig config = new SysConfig();
         config.setConfigKey(configKey);
+        config.setTenantId(tenantId);
         SysConfig retConfig = configMapper.selectConfig(config);
         if (Objects.nonNull(retConfig))
         {
-            redisHelper.set(getCacheKey(configKey), retConfig.getConfigValue());
+            redisHelper.set(getCacheKey(configKey1), retConfig.getConfigValue());
             return retConfig.getConfigValue();
         }
         return StringUtils.EMPTY;
@@ -106,6 +110,7 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
     @Override
     public List<SysConfig> selectConfigList(SysConfig config)
     {
+        config.setTenantId(SecurityUtils.getTenantId());
         return configMapper.selectConfigList(config);
     }
 
@@ -121,7 +126,7 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
         int row = configMapper.insertConfig(config);
         if (row > 0)
         {
-            redisHelper.set(getCacheKey(config.getConfigKey()), config.getConfigValue());
+            redisHelper.set(getCacheKey(config.getConfigKey()+SecurityUtils.getTenantId()), config.getConfigValue());
         }
         return row;
     }
@@ -138,7 +143,7 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
         int row = configMapper.updateConfig(config);
         if (row > 0)
         {
-            redisHelper.set(getCacheKey(config.getConfigKey()), config.getConfigValue());
+            redisHelper.set(getCacheKey(config.getConfigKey()+SecurityUtils.getTenantId()), config.getConfigValue());
         }
         return row;
     }
@@ -160,7 +165,7 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
                 throw new BusinessException(String.format("内置参数【%1$s】不能删除 ", config.getConfigKey()));
             }
             configMapper.deleteConfigById(configId);
-            redisHelper.delete(getCacheKey(config.getConfigKey()));
+            redisHelper.delete(getCacheKey(config.getConfigKey()+SecurityUtils.getTenantId()));
         }
     }
 
@@ -170,10 +175,12 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
     @Override
     public void loadingConfigCache()
     {
-        List<SysConfig> configsList = configMapper.selectConfigList(new SysConfig());
+        SysConfig config1 = new SysConfig();
+        config1.setTenantId(SecurityUtils.getTenantId());
+        List<SysConfig> configsList = configMapper.selectConfigList(config1);
         for (SysConfig config : configsList)
         {
-            redisHelper.set(getCacheKey(config.getConfigKey()), config.getConfigValue());
+            redisHelper.set(getCacheKey(config.getConfigKey()+SecurityUtils.getTenantId()), config.getConfigValue());
         }
     }
 
@@ -207,7 +214,7 @@ public class SysConfigServiceImpl extends AbstractCrudService<SysConfigMapper, S
     public String checkConfigKeyUnique(SysConfig config)
     {
         Long configId = Objects.isNull(config.getConfigId()) ? -1L : config.getConfigId();
-        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey());
+        SysConfig info = configMapper.checkConfigKeyUnique(config.getConfigKey(), config.getTenantId());
         if (Objects.nonNull(info) && info.getConfigId().longValue() != configId.longValue())
         {
             return UserConstants.NOT_UNIQUE;

+ 8 - 4
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysDeptServiceImpl.java

@@ -18,8 +18,6 @@ import com.usky.system.service.ISysDeptService;
 import com.usky.system.service.vo.TreeNode;
 import com.usky.system.service.vo.TreeSelect;
 import com.usky.system.service.vo.UserPostVo;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -35,8 +33,6 @@ import java.util.stream.Collectors;
 @Service
 public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDept> implements ISysDeptService {
 
-    private static final Logger log = LoggerFactory.getLogger(SysDeptServiceImpl.class);//还原代码
-
     @Autowired
     private SysDeptMapper deptMapper;
 
@@ -212,6 +208,14 @@ public class SysDeptServiceImpl extends AbstractCrudService<SysDeptMapper, SysDe
         return deptMapper.selectDeptById(deptId);
     }
 
+    @Override
+    public List<SysDept> selectDeptByIds(List<Long> deptIds) {
+        if (deptIds == null || deptIds.isEmpty()) {
+            return Collections.emptyList();
+        }
+        return deptMapper.selectDeptByIds(deptIds);
+    }
+
     /**
      * 根据ID查询所有子部门(正常状态)
      *

+ 16 - 12
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysMenuServiceImpl.java

@@ -227,7 +227,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
             router.setPath(getRouterPath(menu));
             router.setComponent(getComponent(menu));
             router.setOrderNum(menu.getOrderNum());
-            router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+            router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
             List<SysMenu> cMenus = menu.getChildren();
             if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                 router.setAlwaysShow(true);
@@ -241,11 +241,11 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                 children.setComponent(menu.getComponent());
                 children.setName(StringUtils.capitalize(menu.getPath()));
                 children.setOrderNum(menu.getOrderNum());
-                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                 childrenList.add(children);
                 router.setChildren(childrenList);
             } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
-                router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                 router.setPath("/inner");
                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
                 RouterVo children = new RouterVo();
@@ -254,7 +254,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                 children.setComponent(UserConstants.INNER_LINK);
                 children.setName(StringUtils.capitalize(routerPath));
                 children.setOrderNum(menu.getOrderNum());
-                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                 childrenList.add(children);
                 router.setChildren(childrenList);
             }
@@ -282,6 +282,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                     platformRouterVo.setPlatformName(platformVo.getPlatformName());
                     platformRouterVo.setIcon(platformVo.getIcon());
                     platformRouterVo.setOrderNum(platformVo.getOrderNum());
+                    platformRouterVo.setPlatformType(platformVo.getPlatformType());
                     List<SysMenu> menus1 = this.selectMenuTreeByUserIdOne1(tenantId,
                             platformVo.getId());
                     List<RouterVo> routers = new LinkedList<RouterVo>();
@@ -292,7 +293,9 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                         router.setPath(getRouterPath(menu));
                         router.setComponent(getComponent(menu));
                         router.setOrderNum(menu.getOrderNum());
-                        router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                        router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(),
+                                StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(),
+                                menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                         List<SysMenu> cMenus = menu.getChildren();
                         if (!cMenus.isEmpty() && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                             router.setAlwaysShow(true);
@@ -306,11 +309,11 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                             children.setComponent(menu.getComponent());
                             children.setName(StringUtils.capitalize(menu.getPath()));
                             children.setOrderNum(menu.getOrderNum());
-                            children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                            children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                             childrenList.add(children);
                             router.setChildren(childrenList);
                         } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
-                            router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                            router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                             router.setPath("/inner");
                             List<RouterVo> childrenList = new ArrayList<RouterVo>();
                             RouterVo children = new RouterVo();
@@ -319,7 +322,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                             children.setComponent(UserConstants.INNER_LINK);
                             children.setName(StringUtils.capitalize(routerPath));
                             children.setOrderNum(menu.getOrderNum());
-                            children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                            children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                             childrenList.add(children);
                             router.setChildren(childrenList);
                         }
@@ -347,6 +350,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                         platformRouterVo.setPlatformName(platformVo.getPlatformName());
                         platformRouterVo.setIcon(platformVo.getIcon());
                         platformRouterVo.setOrderNum(platformVo.getOrderNum());
+                        platformRouterVo.setPlatformType(platformVo.getPlatformType());
                         List<SysMenu> menus1 = this.selectMenuTreeByUserId1(userId,
                                 platformVo.getId().longValue(), tenantId);
                         List<RouterVo> routers = new LinkedList<RouterVo>();
@@ -357,7 +361,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                             router.setPath(getRouterPath(menu));
                             router.setComponent(getComponent(menu));
                             router.setOrderNum(menu.getOrderNum());
-                            router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                            router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                             List<SysMenu> cMenus = menu.getChildren();
                             if (!cMenus.isEmpty() && cMenus.size() > 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                                 router.setAlwaysShow(true);
@@ -371,11 +375,11 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                                 children.setComponent(menu.getComponent());
                                 children.setName(StringUtils.capitalize(menu.getPath()));
                                 children.setOrderNum(menu.getOrderNum());
-                                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                                 childrenList.add(children);
                                 router.setChildren(childrenList);
                             } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
-                                router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                                router.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                                 router.setPath("/inner");
                                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
                                 RouterVo children = new RouterVo();
@@ -384,7 +388,7 @@ public class SysMenuServiceImpl extends AbstractCrudService<SysMenuMapper, SysMe
                                 children.setComponent(UserConstants.INNER_LINK);
                                 children.setName(StringUtils.capitalize(routerPath));
                                 children.setOrderNum(menu.getOrderNum());
-                                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark()));
+                                children.setMeta(new MetaVo(menu.getMenuName(), menu.getMenuAliasName(), menu.getIcon(), menu.getPath(), menu.getIsFrame(), menu.getIsNew(), menu.getRemark(),menu.getMenuMold()));
                                 childrenList.add(children);
                                 router.setChildren(childrenList);
                             }

+ 129 - 1
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPersonServiceImpl.java

@@ -4,16 +4,27 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.usky.common.mybatis.core.AbstractCrudService;
-import com.usky.common.security.utils.SecurityUtils;
+import com.usky.system.domain.SysDept;
 import com.usky.system.domain.SysPerson;
+import com.usky.system.domain.SysPost;
+import com.usky.system.domain.SysUser;
 import com.usky.system.domain.SysUserPerson;
 import com.usky.system.mapper.SysPersonMapper;
+import com.usky.system.service.ISysDeptService;
+import com.usky.system.service.ISysPostService;
+import com.usky.system.service.ISysUserService;
 import com.usky.system.service.SysPersonService;
 import com.usky.system.service.SysUserPersonService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -27,6 +38,12 @@ import java.util.List;
 public class SysPersonServiceImpl extends AbstractCrudService<SysPersonMapper, SysPerson> implements SysPersonService {
     @Autowired
     private SysUserPersonService sysUserPersonService;
+    @Autowired
+    private ISysUserService sysUserService;
+    @Autowired
+    private ISysDeptService sysDeptService;
+    @Autowired
+    private ISysPostService sysPostService;
 
     @Override
     public SysPerson getsysPerson(Long userid) {
@@ -38,7 +55,118 @@ public class SysPersonServiceImpl extends AbstractCrudService<SysPersonMapper, S
             LambdaQueryWrapper<SysPerson> query = Wrappers.lambdaQuery();
             query.eq(SysPerson::getId, userPersonList.get(0).getPersonId());
             sysPerson = this.getOne(query);
+            if (sysPerson != null) {
+                fillDeptAndPostFromUser(sysPerson, userid);
+            }
         }
         return sysPerson;
     }
+
+    @Override
+    public void fillDeptAndPostFromUser(SysPerson person, Long userId) {
+        if (person == null) {
+            return;
+        }
+        if (userId == null) {
+            clearPersonDeptPost(person);
+            return;
+        }
+        SysUser user = sysUserService.selectUserById(userId);
+        if (user == null) {
+            clearPersonDeptPost(person);
+            return;
+        }
+        person.setDeptId(user.getDeptId());
+        if (user.getDeptId() != null) {
+            SysDept dept = sysDeptService.selectDeptById(user.getDeptId());
+            person.setDeptName(dept != null ? dept.getDeptName() : null);
+        } else {
+            person.setDeptName(null);
+        }
+        List<Integer> postIds = sysPostService.selectPostListByUserId(userId);
+        if (postIds == null || postIds.isEmpty()) {
+            person.setPostId(null);
+            person.setPostName(null);
+        } else {
+            Long pid = postIds.get(0).longValue();
+            person.setPostId(pid);
+            SysPost post = sysPostService.selectPostById(pid);
+            person.setPostName(post != null ? post.getPostName() : null);
+        }
+    }
+
+    @Override
+    public void fillDeptAndPostForList(List<SysPerson> list, Map<Integer, Long> personIdToUserId) {
+        if (list == null || list.isEmpty()) {
+            return;
+        }
+        if (personIdToUserId == null || personIdToUserId.isEmpty()) {
+            list.forEach(this::clearPersonDeptPost);
+            return;
+        }
+        Set<Long> userIds = new HashSet<>(personIdToUserId.values());
+        if (userIds.isEmpty()) {
+            list.forEach(this::clearPersonDeptPost);
+            return;
+        }
+        List<SysUser> users = sysUserService.list(Wrappers.<SysUser>lambdaQuery().in(SysUser::getUserId, userIds));
+        Map<Long, SysUser> userById = users.stream()
+                .collect(Collectors.toMap(SysUser::getUserId, u -> u, (a, b) -> a));
+
+        List<Long> deptIdList = users.stream()
+                .map(SysUser::getDeptId)
+                .filter(Objects::nonNull)
+                .distinct()
+                .collect(Collectors.toList());
+        Map<Long, String> deptNameMap = new HashMap<>();
+        if (!deptIdList.isEmpty()) {
+            List<SysDept> depts = sysDeptService.selectDeptByIds(deptIdList);
+            if (depts != null) {
+                for (SysDept d : depts) {
+                    deptNameMap.put(d.getDeptId(), d.getDeptName());
+                }
+            }
+        }
+
+        Map<Long, Long> userFirstPostId = new HashMap<>();
+        for (Long uid : userIds) {
+            List<Integer> pids = sysPostService.selectPostListByUserId(uid);
+            if (pids != null && !pids.isEmpty()) {
+                userFirstPostId.put(uid, pids.get(0).longValue());
+            }
+        }
+        Set<Long> postIdSet = new HashSet<>(userFirstPostId.values());
+        Map<Long, String> postNameMap = new HashMap<>();
+        for (Long pid : postIdSet) {
+            SysPost post = sysPostService.selectPostById(pid);
+            if (post != null) {
+                postNameMap.put(pid, post.getPostName());
+            }
+        }
+
+        for (SysPerson p : list) {
+            Long uid = personIdToUserId.get(p.getId());
+            if (uid == null) {
+                clearPersonDeptPost(p);
+                continue;
+            }
+            SysUser u = userById.get(uid);
+            if (u == null) {
+                clearPersonDeptPost(p);
+                continue;
+            }
+            p.setDeptId(u.getDeptId());
+            p.setDeptName(u.getDeptId() != null ? deptNameMap.get(u.getDeptId()) : null);
+            Long pid = userFirstPostId.get(uid);
+            p.setPostId(pid);
+            p.setPostName(pid != null ? postNameMap.get(pid) : null);
+        }
+    }
+
+    private void clearPersonDeptPost(SysPerson person) {
+        person.setDeptId(null);
+        person.setDeptName(null);
+        person.setPostId(null);
+        person.setPostName(null);
+    }
 }

+ 1 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPlatformServiceImpl.java

@@ -99,6 +99,7 @@ public class SysPlatformServiceImpl extends AbstractCrudService<SysPlatformMappe
         sysPlatform.setPlatformName(platformMenuVo.getPlatformName());
         sysPlatform.setIcon(platformMenuVo.getIcon());
         sysPlatform.setOrderNum(platformMenuVo.getOrderNum());
+        sysPlatform.setPlatformType(platformMenuVo.getPlatformType());
         if (platformMenuVo.getPlatformId().intValue() == 0) {
             sysPlatform.setCreateBy(SecurityUtils.getUsername());
             sysPlatform.setCreateTime(LocalDateTime.now());

+ 7 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysTenantServiceImpl.java

@@ -124,6 +124,9 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
         sysDept.setCreateBy(SecurityUtils.getUsername());
         iSysDeptService.insertDept(sysDept);
 
+        //base_space
+        sysTenantMapper.insertBaseSpace(sysTenant.getTenantName(),tenantId);
+
         TenantPlatformVo tenantPlatformVo = new TenantPlatformVo();
         tenantPlatformVo.setPlatformIds(new Integer[]{Integer.parseInt(sysTenant.getSystemName())});
         tenantPlatformVo.setRequestId(0);
@@ -152,6 +155,9 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
         sysDept.setCreateBy(SecurityUtils.getUsername());
         iSysDeptService.insertDept(sysDept);
 
+        //base_space
+        sysTenantMapper.insertBaseSpace(sysTenant.getTenantName(),tenantId);
+
         //在用户租户表中添加克隆账号id与租户id绑定关系
         SysUserTenant sysUserTenant = new SysUserTenant();
         sysUserTenant.setUserId(SecurityUtils.getUserId());
@@ -209,6 +215,7 @@ public class SysTenantServiceImpl extends AbstractCrudService<SysTenantMapper, S
     @Override
     public void delTenantData(Integer tenantId) {
         sysTenantMapper.delSysTenant(tenantId);
+        sysTenantMapper.delBaseSpace(tenantId);
         sysTenantMapper.delSysDept(tenantId);
         sysTenantMapper.delSysUser(tenantId);
         sysTenantMapper.delSysUserTenant(tenantId);

+ 9 - 3
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserServiceImpl.java

@@ -660,14 +660,18 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
         if (!StringUtils.isBlank(username)) {
             if (!StringUtils.isBlank(method) && method.equals("switch")){
                 sysUser = userMapper.selectUserTenantData1(username, tenantId);
-                sysUser.setTenantId(tenantId);
+                if(sysUser != null){
+                    sysUser.setTenantId(tenantId);
+                }
             }else {
                 sysUser = userMapper.selectUserTenantData(username, tenantId);
             }
         } else if (!StringUtils.isBlank(phone)) {
             if (!StringUtils.isBlank(method) && method.equals("switch")){
                 sysUser = userMapper.selectUserTenantDataOne1(tenantId, phone);
-                sysUser.setTenantId(tenantId);
+                if(sysUser != null){
+                    sysUser.setTenantId(tenantId);
+                }
             }else {
                 sysUser = userMapper.selectUserTenantDataOne(tenantId, phone);
             }
@@ -675,7 +679,9 @@ public class SysUserServiceImpl extends AbstractCrudService<SysUserMapper, SysUs
         if (Objects.isNull(sysUser)) {
             if (!StringUtils.isBlank(method) && method.equals("switch")){
                 sysUser = userMapper.selectUserTenantDataOne1(tenantId, username);
-                sysUser.setTenantId(tenantId);
+                if(sysUser != null){
+                    sysUser.setTenantId(tenantId);
+                }
             }else {
                 sysUser = userMapper.selectUserTenantDataOne(tenantId, username);
             }

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

@@ -1,25 +1,31 @@
 package com.usky.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 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;
+import com.usky.system.service.vo.TenantPlatformVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -38,6 +44,9 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
     @Autowired
     private SysUserRoleMapper sysUserRoleMapper;
 
+    @Autowired
+    private SysTenantConfigMapper sysTenantConfigMapper;
+
     /**
      * 企业邀请用户
      *
@@ -79,21 +88,47 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
      * 根据用户查询企业下拉框
      */
     @Override
-    @Transactional
+    @Transactional(readOnly = true)
     public List<SysTenant> getTenantByUser(Long userId) {
         LambdaQueryWrapper<SysUserTenant> queryWrapper = Wrappers.lambdaQuery();
         queryWrapper.eq(SysUserTenant::getUserId, userId);
         List<SysUserTenant> userTenants = this.list(queryWrapper);
-        List<Integer> tenantIdList = new ArrayList<>();
-        List<SysTenant> tenantList = new ArrayList<>();
+        if (CollectionUtils.isEmpty(userTenants)) {
+            return new ArrayList<>();
+        }
+
+        List<Integer> tenantIdList = userTenants.stream()
+                .map(SysUserTenant::getTenantId)
+                .collect(Collectors.toList());
+
+        // 租户列表(仅启用状态)
         LambdaQueryWrapper<SysTenant> queryWrapper1 = Wrappers.lambdaQuery();
-        if (CollectionUtils.isNotEmpty(userTenants)) {
-            for (int i = 0; i < userTenants.size(); i++) {
-                tenantIdList.add(userTenants.get(i).getTenantId());
+        queryWrapper1.in(SysTenant::getId, tenantIdList).eq(SysTenant::getStatus, 0);
+        List<SysTenant> tenantList = sysTenantService.list(queryWrapper1);
+        if (CollectionUtils.isEmpty(tenantList)) {
+            return tenantList;
+        }
+
+        // 租户配置(用于 logo)
+        LambdaQueryWrapper<SysTenantConfig> queryWrapper2 = Wrappers.lambdaQuery();
+        queryWrapper2.in(SysTenantConfig::getTenantId, tenantIdList);
+        List<SysTenantConfig> tenantConfigList = sysTenantConfigMapper.selectList(queryWrapper2);
+
+        // 用 Map 做 O(1) 查找,避免嵌套循环
+        Map<Integer, SysUserTenant> tenantIdToUserTenant = userTenants.stream()
+                .collect(Collectors.toMap(SysUserTenant::getTenantId, ut -> ut, (a, b) -> a));
+        Map<Integer, SysTenantConfig> tenantIdToConfig = tenantConfigList.stream()
+                .collect(Collectors.toMap(SysTenantConfig::getTenantId, c -> c, (a, b) -> a));
+
+        for (SysTenant tenant : tenantList) {
+            SysUserTenant ut = tenantIdToUserTenant.get(tenant.getId());
+            if (ut != null) {
+                tenant.setIsDefault(ut.getIsDefault());
+            }
+            SysTenantConfig config = tenantIdToConfig.get(tenant.getId());
+            if (config != null) {
+                tenant.setTenantLogo(config.getMiddleLogo());
             }
-            queryWrapper1.in(SysTenant::getId, tenantIdList)
-                    .eq(SysTenant::getStatus, 0);
-            tenantList = sysTenantService.list(queryWrapper1);
         }
         return tenantList;
     }
@@ -107,4 +142,29 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
         List<SysUserTenant> userTenants = this.list(queryWrapper);
         return userTenants.get(0).getIsDefault();
     }
+
+    @Override
+    @Transactional
+    public Integer getIsDefaultByUser(Long userId) {
+        LambdaQueryWrapper<SysUserTenant> queryWrapper = Wrappers.lambdaQuery();
+        queryWrapper.eq(SysUserTenant::getUserId, userId)
+                .eq(SysUserTenant::getIsDefault, 1);
+        List<SysUserTenant> userTenants = this.list(queryWrapper);
+        return userTenants.get(0).getTenantId();
+    }
+
+    @Override
+    @Transactional
+    public void updateUserTenant(SysUserTenant userTenant) {
+        LambdaUpdateWrapper<SysUserTenant> updateWrapper = new LambdaUpdateWrapper<>();
+        updateWrapper.set(SysUserTenant::getIsDefault, 0)
+                .eq(SysUserTenant::getUserId, userTenant.getUserId())
+                .eq(SysUserTenant::getIsDefault, 1);
+        this.update(updateWrapper);
+        LambdaUpdateWrapper<SysUserTenant> updateWrapper1 = new LambdaUpdateWrapper<>();
+        updateWrapper1.set(SysUserTenant::getIsDefault, 1)
+                .eq(SysUserTenant::getUserId, userTenant.getUserId())
+                .eq(SysUserTenant::getTenantId, userTenant.getTenantId());
+        this.update(updateWrapper1);
+    }
 }

+ 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;
+    }
+}

+ 14 - 3
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/MetaVo.java

@@ -42,11 +42,14 @@ public class MetaVo
     /** 备注 */
     private String remark;
 
+    /** 类型 */
+    private Integer menuType;
+
     public MetaVo()
     {
     }
 
-    public MetaVo(String title, String aliasTitle, String icon, String isFrame, Integer isNew, String remark)
+    public MetaVo(String title, String aliasTitle, String icon, String isFrame, Integer isNew, String remark, Integer menuType)
     {
         this.title = title;
         this.aliasTitle = aliasTitle;
@@ -54,6 +57,7 @@ public class MetaVo
         this.isFrame = isFrame;
         this.isNew = isNew;
         this.remark = remark;
+        this.menuType = menuType;
     }
 
     public MetaVo(String title, String aliasTitle, String icon, String remark)
@@ -71,7 +75,7 @@ public class MetaVo
         this.icon = icon;
     }
 
-    public MetaVo(String title, String aliasTitle, String icon, String link, String isFrame, Integer isNew, String remark)
+    public MetaVo(String title, String aliasTitle, String icon, String link, String isFrame, Integer isNew, String remark, Integer menuType)
     {
         this.title = title;
         this.aliasTitle = aliasTitle;
@@ -79,6 +83,7 @@ public class MetaVo
         this.isFrame = isFrame;
         this.isNew = isNew;
         this.remark = remark;
+        this.menuType = menuType;
     }
 
     public MetaVo(String title, String aliasTitle, String icon, String link, String remark)
@@ -89,7 +94,8 @@ public class MetaVo
         this.remark = remark;
     }
 
-    public MetaVo(String title, String aliasTitle, String icon, boolean noCache, String link, String isFrame, Integer isNew, String remark)
+    public MetaVo(String title, String aliasTitle, String icon, boolean noCache, String link, String isFrame,
+                  Integer isNew, String remark, Integer menuType)
     {
         this.title = title;
         this.aliasTitle = aliasTitle;
@@ -97,6 +103,7 @@ public class MetaVo
         this.isFrame = isFrame;
         this.isNew = isNew;
         this.remark = remark;
+        this.menuType = menuType;
         if (StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS))
         {
 
@@ -183,4 +190,8 @@ public class MetaVo
     {
         this.remark = remark;
     }
+
+    public Integer getMenuType() { return menuType; }
+
+    public void setMenuType(Integer menuType) { this.menuType = menuType; }
 }

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformMenuVo.java

@@ -41,6 +41,11 @@ public class PlatformMenuVo implements Serializable {
      */
     private Integer orderNum;
 
+    /**
+     * 应用类型(1.基础功能,2.业务功能)
+     */
+    private Integer platformType;
+
     /**
      * 菜单ID
      */

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformRouterVo.java

@@ -39,6 +39,11 @@ public class PlatformRouterVo {
      */
     private Integer orderNum;
 
+    /**
+     * 应用类型(1.基础功能,2.业务功能)
+     */
+    private Integer platformType;
+
     /**
      * 路由集合
      */

+ 25 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPersonVo.java

@@ -105,6 +105,31 @@ public class SysPersonVo{
      */
     private LocalDateTime updateTime;
 
+    /**
+     * 图片数据(base64编码)
+     */
+    private String faceBase;
+
+    /**
+     * 验证次数(默认0)
+     */
+    private Integer vefNum;
+
+    /**
+     * 人脸备注
+     */
+    private String remark;
+
+    /**
+     * 人脸状态(0=可用,1=不可用)
+     */
+    private Integer faceStatus;
+
+    /**
+     * 卡号
+     */
+    private String cardNum;
+
     public static long getSerialVersionUID() {
         return serialVersionUID;
     }

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPlatformVo.java

@@ -56,6 +56,11 @@ public class SysPlatformVo implements Serializable {
      */
     private Integer orderNum;
 
+    /**
+     * 应用类型(1.基础功能,2.业务功能)
+     */
+    private Integer platformType;
+
     /**
      * 创建者
      */

+ 5 - 0
base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysTenantTwoVo.java

@@ -115,6 +115,11 @@ public class SysTenantTwoVo implements Serializable {
      */
     private String systemName;
 
+    /**
+     * 涉及领域(1、消防 2、楼宇 3、人防 4、能耗)
+     */
+    private String field;
+
 
     /**
      * 系统名称

+ 10 - 1
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysConfigMapper.xml

@@ -56,12 +56,19 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
 				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
 			</if>
+            <if test="tenantId != null and tenantId != '' and tenantId != 0">
+                AND tenant_id = #{tenantId}
+            </if>
 		</where>
     </select>
     
     <select id="checkConfigKeyUnique" parameterType="String" resultMap="SysConfigResult">
         <include refid="selectConfigVo"/>
-        where config_key = #{configKey} limit 1
+        where config_key = #{configKey}
+        <if test="tenantId != null and tenantId != '' and tenantId != 0">
+            AND tenant_id = #{tenantId}
+        </if>
+        limit 1
     </select>
     
     <insert id="insertConfig" parameterType="com.usky.system.domain.SysConfig">
@@ -72,6 +79,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="configType != null and configType != '' ">config_type,</if>
 			<if test="createBy != null and createBy != ''">create_by,</if>
 			<if test="remark != null and remark != ''">remark,</if>
+            <if test="tenantId != null and tenantId != '' and tenantId != 0">tenant_id,</if>
  			create_time
         )values(
 			<if test="configName != null and configName != ''">#{configName},</if>
@@ -80,6 +88,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="configType != null and configType != ''">#{configType},</if>
 			<if test="createBy != null and createBy != ''">#{createBy},</if>
 			<if test="remark != null and remark != ''">#{remark},</if>
+            <if test="tenantId != null and tenantId != '' and tenantId != 0">#{tenantId},</if>
  			sysdate()
 		)
     </insert>

+ 9 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysDeptMapper.xml

@@ -83,6 +83,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		<include refid="selectDeptVo"/>
 		where dept_id = #{deptId}
 	</select>
+
+	<select id="selectDeptByIds" resultMap="SysDeptResult">
+		<include refid="selectDeptVo"/>
+		where d.del_flag = '0'
+		and d.dept_id in
+		<foreach collection="deptIds" item="deptId" open="(" separator="," close=")">
+			#{deptId}
+		</foreach>
+	</select>
     
     <select id="checkDeptExistUser" parameterType="Long" resultType="int">
 		select count(1) from sys_user where dept_id = #{deptId} and del_flag = '0'

+ 15 - 5
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -16,6 +16,7 @@
         <result property="isFrame" column="is_frame"/>
         <result property="isCache" column="is_cache"/>
         <result property="menuType" column="menu_type"/>
+        <result property="menuMold" column="menu_mold"/>
         <result property="visible" column="visible"/>
         <result property="status" column="status"/>
         <result property="perms" column="perms"/>
@@ -60,6 +61,7 @@
                is_frame,
                is_cache,
                menu_type,
+               menu_mold,
                visible,
                status,
                ifnull(perms, '') as perms,
@@ -97,6 +99,7 @@
         b.is_frame,
         b.is_cache,
         b.menu_type,
+        b.menu_mold,
         b.visible,
         b.status,
         ifnull(b.perms, '') as perms,
@@ -128,6 +131,7 @@
                         m.is_frame,
                         m.is_cache,
                         m.menu_type,
+                        m.menu_mold,
                         m.icon,
                         m.order_num,
                         m.create_time,
@@ -141,7 +145,7 @@
 
     <select id="selectMenuListByUserId" parameterType="com.usky.system.domain.SysMenu" resultMap="SysMenuResult">
         select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status,
-        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time, m.remark,m.isNew
+        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type,m.menu_mold, m.icon, m.order_num, m.create_time, m.remark,m.isNew
         from sys_menu m
         left join sys_role_menu rm on m.menu_id = rm.menu_id
         left join sys_user_role ur on rm.role_id = ur.role_id
@@ -161,14 +165,14 @@
 
     <select id="selectMenuListByUserIdOne" resultMap="SysMenuResult">
         select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status,
-        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type,m.menu_mold, m.icon, m.order_num, m.create_time
         from sys_menu m
         order by m.parent_id, m.order_num
     </select>
 
     <select id="selectMobileMenuListByUserIdOne" resultMap="SysMobileMenuResult">
         select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.visible, m.status,
-        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+        ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type,m.menu_mold, m.icon, m.order_num, m.create_time
         from sys_mobile_menu m
         order by m.parent_id, m.order_num
     </select>
@@ -187,6 +191,7 @@
                         m.is_frame,
                         m.is_cache,
                         m.menu_type,
+                        m.menu_mold,
                         m.icon,
                         m.order_num,
                         m.create_time,
@@ -208,7 +213,7 @@
         select distinct m.menu_id,
                         m.parent_id,
                         m.menu_name,
-                        rm.menu_alias_name,
+                        t.menu_alias_name,
                         m.path,
                         m.component,
                         m.visible,
@@ -217,6 +222,7 @@
                         m.is_frame,
                         m.is_cache,
                         m.menu_type,
+                        m.menu_mold,
                         m.icon,
                         m.order_num,
                         m.create_time,
@@ -228,9 +234,10 @@
                  left join sys_user_role ur on rm.role_id = ur.role_id
                  left join sys_role ro on ur.role_id = ro.role_id
                  left join sys_user u on u.user_id = ur.user_id
-                 left join sys_tenant_menu t on u.tenant_id = t.tenant_id
+                 left join sys_tenant_menu t on m.menu_id = t.menu_id
         where u.user_id = #{userId}
           and ur.tenant_id = #{tenantId}
+          and t.tenant_id = #{tenantId}
           and m.menu_type in ('M', 'C')
           and m.status = 0
           AND ro.status = 0
@@ -252,6 +259,7 @@
             m.is_frame,
             m.is_cache,
             m.menu_type,
+            m.menu_mold,
             m.icon,
             m.order_num,
             m.create_time,
@@ -284,6 +292,7 @@
             m.is_frame,
             m.is_cache,
             m.menu_type,
+            m.menu_mold,
             m.icon,
             m.order_num,
             m.create_time,
@@ -369,6 +378,7 @@
             <if test="isFrame != null and isFrame != ''">is_frame = #{isFrame},</if>
             <if test="isCache != null and isCache != ''">is_cache = #{isCache},</if>
             <if test="menuType != null and menuType != ''">menu_type = #{menuType},</if>
+            <if test="menuMold != null and menuMold != ''">menu_mold = #{menuMold},</if>
             <if test="visible != null">visible = #{visible},</if>
             <if test="status != null">status = #{status},</if>
             <if test="perms !=null">perms = #{perms},</if>

+ 5 - 2
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPersonMapper.xml

@@ -12,8 +12,6 @@
         <result column="education_degree" property="educationDegree" />
         <result column="id_number" property="idNumber" />
         <result column="link_phone" property="linkPhone" />
-        <result column="post_id" property="postId" />
-        <result column="dept_id" property="deptId" />
         <result column="entry_time" property="entryTime" />
         <result column="certificate_url1" property="certificateUrl1" />
         <result column="certificate_url2" property="certificateUrl2" />
@@ -22,6 +20,11 @@
         <result column="create_time" property="createTime" />
         <result column="update_person" property="updatePerson" />
         <result column="update_time" property="updateTime" />
+        <result column="face_base" property="faceBase" />
+        <result column="vef_num" property="vefNum" />
+        <result column="remark" property="remark" />
+        <result column="face_status" property="faceStatus" />
+        <result column="card_num" property="cardNum" />
     </resultMap>
 
 </mapper>

+ 1 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPlatformMapper.xml

@@ -10,6 +10,7 @@
         <result column="remark" property="remark" />
         <result column="icon" property="icon" />
         <result column="order_num" property="orderNum" />
+        <result column="platform_type" property="platformType" />
         <result column="create_by" property="createBy" />
         <result column="create_time" property="createTime" />
         <result column="update_by" property="updateBy" />

+ 7 - 0
base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysTenantMapper.xml

@@ -168,10 +168,17 @@
         insert into sys_user_role (user_id,role_id,tenant_id)
         values(#{UserId},#{roleId},#{tenantId})
     </insert>
+    <insert id="insertBaseSpace">
+        insert into base_space (name,parent_id,type,root_id,path,deep,created_by,create_time,updated_by,update_time,tenant_id)
+        values(#{tenantName},0,1,0,"",1,`root`,sysdate(),`root`,sysdate(),#{tenantId})
+    </insert>
 
     <delete id="delSysTenant">
         delete from sys_tenant WHERE id = #{tenantId}
     </delete>
+    <delete id="delBaseSpace">
+        delete from base_space where tenant_id = #{tenantId}
+    </delete>
     <delete id="delSysDept">
         delete from sys_dept WHERE tenant_id = #{tenantId}
     </delete>