Jelajahi Sumber

Merge branch 'master' of http://47.111.81.118:3000/uskycloud/usky-cloud into fu-dev

fuyuchuan 1 bulan lalu
induk
melakukan
b22d26cf8b
30 mengubah file dengan 702 tambahan dan 53 penghapusan
  1. 25 0
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysPerson.java
  2. 24 0
      base-modules/service-system/service-system-api/src/main/java/com/usky/system/domain/SysPersonVo.java
  3. 0 1
      base-modules/service-system/service-system-biz/pom.xml
  4. 3 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysMenuController.java
  5. 226 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/SysPersonController.java
  6. 7 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/controller/web/TokenController.java
  7. 7 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysMenu.java
  8. 47 2
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPerson.java
  9. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysPlatform.java
  10. 6 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysTenant.java
  11. 12 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/domain/SysUser.java
  12. 8 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysDeptMapper.java
  13. 2 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/mapper/SysTenantConfigMapper.java
  14. 8 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/ISysDeptService.java
  15. 13 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/SysPersonService.java
  16. 8 4
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysDeptServiceImpl.java
  17. 16 12
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysMenuServiceImpl.java
  18. 129 1
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPersonServiceImpl.java
  19. 1 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysPlatformServiceImpl.java
  20. 42 18
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/impl/SysUserTenantServiceImpl.java
  21. 29 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/util/IpUtils.java
  22. 14 3
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/MetaVo.java
  23. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformMenuVo.java
  24. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/PlatformRouterVo.java
  25. 25 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPersonVo.java
  26. 5 0
      base-modules/service-system/service-system-biz/src/main/java/com/usky/system/service/vo/SysPlatformVo.java
  27. 9 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysDeptMapper.xml
  28. 15 5
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysMenuMapper.xml
  29. 5 2
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPersonMapper.xml
  30. 1 0
      base-modules/service-system/service-system-biz/src/main/resources/mapper/system/SysPlatformMapper.xml

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

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

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

+ 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;
+
     /**
      * 创建者
      */

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

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

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

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

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

+ 42 - 18
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;
@@ -20,8 +23,9 @@ 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>
@@ -40,6 +44,9 @@ public class SysUserTenantServiceImpl extends AbstractCrudService<SysUserTenantM
     @Autowired
     private SysUserRoleMapper sysUserRoleMapper;
 
+    @Autowired
+    private SysTenantConfigMapper sysTenantConfigMapper;
+
     /**
      * 企业邀请用户
      *
@@ -81,29 +88,46 @@ 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());
             }
-            queryWrapper1.in(SysTenant::getId, tenantIdList)
-                    .eq(SysTenant::getStatus, 0);
-            tenantList = sysTenantService.list(queryWrapper1);
-            if (CollectionUtils.isNotEmpty(tenantList)) {
-                for (int j = 0; j < userTenants.size(); j++) {
-                    for (int k = 0; k < tenantList.size(); k++) {
-                        if (userTenants.get(j).getTenantId().equals(tenantList.get(k).getId())){
-                            tenantList.get(k).setIsDefault(userTenants.get(j).getIsDefault());
-                        }
-                    }
-                }
+            SysTenantConfig config = tenantIdToConfig.get(tenant.getId());
+            if (config != null) {
+                tenant.setTenantLogo(config.getMiddleLogo());
             }
         }
         return tenantList;

+ 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;
+
     /**
      * 创建者
      */

+ 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" />