Commit c088ba08 authored by pengxin's avatar pengxin

新增知识库授权功能。

parent f4509e40
package com.yice.webadmin.app.controller;
import cn.hutool.core.util.BooleanUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
......@@ -18,17 +19,21 @@ import com.yice.common.log.model.constant.SysOperationLogType;
import com.yice.webadmin.app.config.KnowledgeConfig;
import com.yice.webadmin.app.dto.KnowledgeManageDto;
import com.yice.webadmin.app.model.KnowledgeManage;
import com.yice.webadmin.app.model.KnowledgeUser;
import com.yice.webadmin.app.service.KnowledgeManageService;
import com.yice.webadmin.app.service.ProxyPythonService;
import com.yice.webadmin.app.vo.KnowledgeManageVo;
import com.yice.webadmin.upms.dto.SysUserDto;
import com.yice.webadmin.upms.model.SysUser;
import com.yice.webadmin.upms.vo.SysUserVo;
import io.swagger.annotations.Api;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.*;
import java.util.stream.Collectors;
/**
* 知识库管理操作控制器类。
......@@ -83,6 +88,120 @@ public class KnowledgeManageController {
}
}
/**
* 为指定页面添加用户列表。该操作可同时给一批用户赋值页面,并在同一事务内完成。
*
* @param knowledgeId 知识库id。
* @param userIdListString 逗号分隔的用户Id列表。
* @return 应答结果对象。
*/
@OperationLog(type = SysOperationLogType.ADD_M2M)
@PostMapping("/addKnowledgeUser")
public ResponseResult<Void> addKnowledgeUser(@MyRequestBody Long knowledgeId,
@MyRequestBody String userIdListString) {
if (MyCommonUtil.existBlankArgument(knowledgeId, userIdListString)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
Set<Long> userIdSet = Arrays.stream(
userIdListString.split(",")).map(Long::valueOf).collect(Collectors.toSet());
KnowledgeUser knowledgeUser = null;
List<KnowledgeUser> knowledgeUserList = new LinkedList<>();
for (Long userId : userIdSet) {
knowledgeUser = new KnowledgeUser(userId, knowledgeId);
knowledgeUserList.add(knowledgeUser);
}
knowledgeManageService.addKnowledgeUserList(knowledgeUserList);
return ResponseResult.success();
}
/**
* 获取不包含指定面Id的用户列表。
* 用户和面是多对多关系,当前接口将返回没有赋值指定PageId的用户列表。可用于给页面添加新用户。
*
* @param knowledgeId 知识库标识。
* @param sysUserDtoFilter 用户过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含用户列表数据。
*/
@PostMapping("/listNotInKnowledgeUser")
public ResponseResult<MyPageData<SysUserVo>> listNotInKnowledgeUser(
@MyRequestBody Long knowledgeId,
@MyRequestBody SysUserDto sysUserDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (MyCommonUtil.existBlankArgument(knowledgeId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> userList = knowledgeManageService.getNotInSysUserListByKnowledgeId(knowledgeId, filter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(userList, SysUser.INSTANCE));
}
/**
* 拥有指定页面的用户列表。
*
* @param knowledgeId 知识库标识。
* @param sysUserDtoFilter 用户过滤对象。
* @param orderParam 排序参数。
* @param pageParam 分页参数。
* @return 应答结果对象,包含用户列表数据。
*/
@PostMapping("/listKnowledgeUser")
public ResponseResult<MyPageData<SysUserVo>> listKnowledgeUser(
@MyRequestBody Long knowledgeId,
@MyRequestBody SysUserDto sysUserDtoFilter,
@MyRequestBody MyOrderParam orderParam,
@MyRequestBody MyPageParam pageParam) {
if (MyCommonUtil.existBlankArgument(knowledgeId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (pageParam != null) {
PageMethod.startPage(pageParam.getPageNum(), pageParam.getPageSize());
}
SysUser filter = MyModelUtil.copyTo(sysUserDtoFilter, SysUser.class);
String orderBy = MyOrderParam.buildOrderBy(orderParam, SysUser.class);
List<SysUser> userList = knowledgeManageService.getSysUserListByKnowledgeId(knowledgeId, filter, orderBy);
return ResponseResult.success(MyPageUtil.makeResponseData(userList, SysUser.INSTANCE));
}
/**
* 为指定用户移除指定页面。
*
* @param knowledgeId 知识库标识。
* @param userId 指定用户主键Id。
* @return 应答数据结果。
*/
@OperationLog(type = SysOperationLogType.DELETE_M2M)
@PostMapping("/deleteKnowledgeUser")
public ResponseResult<Void> deleteKnowledgeUser(@MyRequestBody Long knowledgeId, @MyRequestBody Long userId) {
if (MyCommonUtil.existBlankArgument(knowledgeId, userId)) {
return ResponseResult.error(ErrorCodeEnum.ARGUMENT_NULL_EXIST);
}
if (!knowledgeManageService.removeKnowledgeUser(knowledgeId, userId)) {
return ResponseResult.error(ErrorCodeEnum.DATA_NOT_EXIST);
}
return ResponseResult.success();
}
/**
* 列出符合过滤条件的在线表单页面列表。
*
* @return 应答结果对象,包含查询结果集。
*/
@PostMapping("/load")
public ResponseResult<List<KnowledgeManageVo>> load() {
KnowledgeManage knowledgeManageFilter = new KnowledgeManage();
TokenData tokenData = TokenData.takeFromRequest();
knowledgeManageFilter.setCreateUserId(BooleanUtil.isTrue(tokenData.getIsAdmin()) ? null : tokenData.getUserId());
List<KnowledgeManage> knowledgeManageList = knowledgeManageService.loadKnowledgeUserList(knowledgeManageFilter, "create_time");
return ResponseResult.success(KnowledgeManage.INSTANCE.fromModelList(knowledgeManageList));
}
/**
* 更新知识库管理数据。
*
......
......@@ -12,7 +12,7 @@ import java.util.List;
* @author linking
* @date 2023-04-13
*/
public interface KnowledgeManageMapper extends BaseDaoMapper<KnowledgeManage> {
public interface KnowledgeManageMapper extends BaseDaoMapper<KnowledgeManage> {
/**
* 批量插入对象列表。
......@@ -25,9 +25,21 @@ public interface KnowledgeManageMapper extends BaseDaoMapper<KnowledgeManage> {
* 获取过滤后的对象列表。
*
* @param knowledgeManageFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<KnowledgeManage> getKnowledgeManageList(
@Param("knowledgeManageFilter") KnowledgeManage knowledgeManageFilter, @Param("orderBy") String orderBy);
/**
* 获取过滤后的对象列表。
*
* @param knowledgeManageFilter 主表过滤对象。
* @param orderBy 排序字符串,order by从句的参数。
* @return 对象列表。
*/
List<KnowledgeManage> loadKnowLedgeList(
@Param("knowledgeManageFilter") KnowledgeManage knowledgeManageFilter, @Param("orderBy") String orderBy);
}
package com.yice.webadmin.app.dao;
import com.yice.common.core.base.dao.BaseDaoMapper;
import com.yice.webadmin.app.model.KnowledgeUser;
import com.yice.webadmin.upms.model.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 知识库管理数据操作访问接口。
*
* @author linking
* @date 2023-04-13
*/
public interface KnowledgeUserMapper extends BaseDaoMapper<KnowledgeUser> {
/**
* 批量插入对象列表。
*
* @param knowledgeUserList 新增对象列表。
*/
void insertList(List<KnowledgeUser> knowledgeUserList);
/**
* 根据页面Id,获取关联的用户列表。
*
* @param knowledgeId 知识库ID。
* @param sysUserFilter 用户过滤条件对象。
* @param orderBy order by从句的参数。
* @return 和角色Id关联的用户列表。
*/
List<SysUser> getSysUserListByKnowledgeId(
@Param("knowledgeId") Long knowledgeId,
@Param("sysUserFilter") SysUser sysUserFilter,
@Param("orderBy") String orderBy);
/**
* 获取不属于指定知识库的用户列表。
*
* @param knowledgeId 知识库ID。
* @param sysUserFilter 用户过滤条件对象。
* @param orderBy order by从句的参数。
* @return 和RoleId没有建立关联关系的用户列表。
*/
List<SysUser> getNotInSysUserListByKnowledgeId(
@Param("knowledgeId") Long knowledgeId,
@Param("sysUserFilter") SysUser sysUserFilter,
@Param("orderBy") String orderBy);
}
......@@ -41,6 +41,21 @@
<include refid="com.yice.webadmin.app.dao.KnowledgeManageMapper.inputFilterRef"/>
</sql>
<select id="loadKnowLedgeList" resultMap="BaseResultMap" parameterType="com.yice.webadmin.app.model.KnowledgeManage">
SELECT DISTINCT lmp_knowledge_manage.*
FROM lmp_knowledge_manage
LEFT JOIN lmp_knowledge_user ON lmp_knowledge_user.knowledge_id = lmp_knowledge_manage.knowledge_id
<where>
<include refid="filterRef"/>
</where>
<if test="knowledgeManageFilter.createUserId != null">
AND lmp_knowledge_user.user_id = #{knowledgeManageFilter.createUserId}
</if>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
<!-- 这里仅包含调用接口输入的主表过滤条件 -->
<sql id="inputFilterRef">
<if test="knowledgeManageFilter != null">
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yice.webadmin.app.dao.KnowledgeUserMapper">
<resultMap id="BaseResultMap" type="com.yice.webadmin.upms.model.SysUser">
<id column="user_id" jdbcType="BIGINT" property="userId"/>
<result column="login_name" jdbcType="VARCHAR" property="loginName"/>
<result column="password" jdbcType="VARCHAR" property="password"/>
<result column="dept_id" jdbcType="BIGINT" property="deptId"/>
<result column="show_name" jdbcType="VARCHAR" property="showName"/>
<result column="user_type" jdbcType="INTEGER" property="userType"/>
<result column="head_image_url" jdbcType="VARCHAR" property="headImageUrl"/>
<result column="user_status" jdbcType="INTEGER" property="userStatus"/>
<result column="email" jdbcType="VARCHAR" property="email"/>
<result column="mobile" jdbcType="VARCHAR" property="mobile"/>
<result column="create_user_id" jdbcType="BIGINT" property="createUserId"/>
<result column="update_user_id" jdbcType="BIGINT" property="updateUserId"/>
<result column="create_time" jdbcType="TIMESTAMP" property="createTime"/>
<result column="update_time" jdbcType="TIMESTAMP" property="updateTime"/>
<result column="deleted_flag" jdbcType="INTEGER" property="deletedFlag"/>
</resultMap>
<insert id="insertList">
INSERT INTO lmp_knowledge_user(user_id,knowledge_id)
VALUES
<foreach collection="list" index="index" item="item" separator="," >
(#{item.userId},#{item.knowledgeId})
</foreach>
</insert>
<!-- 如果有逻辑删除字段过滤,请写到这里 -->
<sql id="filterRef">
<!-- 这里必须加上全包名,否则当filterRef被其他Mapper.xml包含引用的时候,就会调用Mapper.xml中的该SQL片段 -->
<include refid="com.yice.webadmin.upms.dao.SysUserMapper.inputFilterRef"/>
AND sys_user.deleted_flag = ${@com.yice.common.core.constant.GlobalDeletedFlag@NORMAL}
</sql>
<select id="getSysUserListByKnowledgeId" resultMap="BaseResultMap">
SELECT
sys_user.*
FROM
lmp_knowledge_user,
sys_user
<where>
AND lmp_knowledge_user.knowledge_id = #{knowledgeId}
AND lmp_knowledge_user.user_id = sys_user.user_id
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
<select id="getNotInSysUserListByKnowledgeId" resultMap="BaseResultMap">
SELECT * FROM sys_user
<where>
NOT EXISTS (SELECT * FROM lmp_knowledge_user
WHERE lmp_knowledge_user.knowledge_id = #{knowledgeId} AND lmp_knowledge_user.user_id = sys_user.user_id)
<include refid="filterRef"/>
</where>
<if test="orderBy != null and orderBy != ''">
ORDER BY ${orderBy}
</if>
</select>
</mapper>
package com.yice.webadmin.app.model;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* KnowledgeUser实体对象。
*
* @author linking
* @date 2022-04-05
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName(value = "lmp_knowledge_user")
public class KnowledgeUser {
/**
* 用户id。
*/
private Long userId;
/**
* 知识库id。
*/
private Long knowledgeId;
}
......@@ -2,6 +2,8 @@ package com.yice.webadmin.app.service;
import com.yice.common.core.base.service.IBaseService;
import com.yice.webadmin.app.model.KnowledgeManage;
import com.yice.webadmin.app.model.KnowledgeUser;
import com.yice.webadmin.upms.model.SysUser;
import java.util.List;
......@@ -21,6 +23,51 @@ public interface KnowledgeManageService extends IBaseService<KnowledgeManage, Lo
*/
KnowledgeManage saveNew(KnowledgeManage knowledgeManage);
/**
* 批量新增用户页面关联。
*
* @param knowledgeUserList 用户页面关系数据列表。
*/
void addKnowledgeUserList(List<KnowledgeUser> knowledgeUserList);
/**
* 移除指定用户和指定知识库的关联关系。
*
* @param knowledgeId 知识库标识。
* @param userId 用户主键Id。
* @return 移除成功返回true,否则false。
*/
boolean removeKnowledgeUser(Long knowledgeId, Long userId);
/**
* 获取指定角色的用户列表。
*
* @param knowledgeId 知识库标识。
* @param filter 用户过滤对象。
* @param orderBy 排序参数。
* @return 用户列表。
*/
List<SysUser> getSysUserListByKnowledgeId(Long knowledgeId, SysUser filter, String orderBy);
/**
* 获取不属于指定知识库的用户列表。
*
* @param knowledgeId 知识库ID。
* @param filter 用户过滤对象。
* @param orderBy 排序参数。
* @return 用户列表。
*/
List<SysUser> getNotInSysUserListByKnowledgeId(Long knowledgeId, SysUser filter, String orderBy);
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
List<KnowledgeManage> loadKnowledgeUserList(KnowledgeManage filter, String orderBy);
/**
* 利用数据库的insertList语法,批量插入对象列表。
*
......
package com.yice.webadmin.app.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.github.pagehelper.Page;
import com.yice.common.core.base.dao.BaseDaoMapper;
......@@ -9,8 +10,11 @@ import com.yice.common.core.object.MyRelationParam;
import com.yice.common.core.util.MyModelUtil;
import com.yice.common.sequence.wrapper.IdGeneratorWrapper;
import com.yice.webadmin.app.dao.KnowledgeManageMapper;
import com.yice.webadmin.app.dao.KnowledgeUserMapper;
import com.yice.webadmin.app.model.KnowledgeManage;
import com.yice.webadmin.app.model.KnowledgeUser;
import com.yice.webadmin.app.service.KnowledgeManageService;
import com.yice.webadmin.upms.model.SysUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -32,7 +36,8 @@ public class KnowledgeManageServiceImpl extends BaseService<KnowledgeManage, Lon
private KnowledgeManageMapper knowledgeManageMapper;
@Autowired
private IdGeneratorWrapper idGenerator;
@Autowired
private KnowledgeUserMapper knowledgeUserMapper;
/**
* 返回当前Service的主表Mapper对象。
......@@ -71,6 +76,59 @@ public class KnowledgeManageServiceImpl extends BaseService<KnowledgeManage, Lon
}
}
/**
* 批量新增用户页面关联。
*
* @param knowledgeUserList 用户页面关系数据列表。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void addKnowledgeUserList(List<KnowledgeUser> knowledgeUserList) {
if(CollUtil.isNotEmpty(knowledgeUserList)){
knowledgeUserMapper.insertList(knowledgeUserList);
}
}
/**
* 获取指定角色的用户列表。
*
* @param knowledgeId 知识库标识。
* @param filter 用户过滤对象。
* @param orderBy 排序参数。
* @return 用户列表。
*/
@Override
public List<SysUser> getSysUserListByKnowledgeId(Long knowledgeId, SysUser filter, String orderBy) {
return knowledgeUserMapper.getSysUserListByKnowledgeId(knowledgeId, filter, orderBy);
}
/**
* 获取不属于指定知识库的用户列表。
*
* @param knowledgeId 知识库ID。
* @param filter 用户过滤对象。
* @param orderBy 排序参数。
* @return 用户列表。
*/
@Override
public List<SysUser> getNotInSysUserListByKnowledgeId(Long knowledgeId, SysUser filter, String orderBy) {
return knowledgeUserMapper.getNotInSysUserListByKnowledgeId(knowledgeId, filter, orderBy);
}
/**
* 移除指定用户和指定知识库的关联关系。
*
* @param knowledgeId 知识库标识。
* @param userId 用户主键Id。
* @return 移除成功返回true,否则false。
*/
@Transactional(rollbackFor = Exception.class)
@Override
public boolean removeKnowledgeUser(Long knowledgeId, Long userId) {
KnowledgeUser knowledgeUser = new KnowledgeUser(knowledgeId,userId);
return knowledgeUserMapper.delete(new QueryWrapper<>(knowledgeUser)) == 1;
}
/**
* 更新数据对象。
*
......@@ -87,6 +145,21 @@ public class KnowledgeManageServiceImpl extends BaseService<KnowledgeManage, Lon
return knowledgeManageMapper.update(knowledgeManage, uw) == 1;
}
/**
* 获取单表查询结果。由于没有关联数据查询,因此在仅仅获取单表数据的场景下,效率更高。
*
* @param filter 过滤对象。
* @param orderBy 排序参数。
* @return 查询结果集。
*/
@Override
public List<KnowledgeManage> loadKnowledgeUserList(KnowledgeManage filter, String orderBy) {
if (filter == null) {
filter = new KnowledgeManage();
}
return knowledgeManageMapper.loadKnowLedgeList(filter, orderBy);
}
/**
* 删除指定数据。
*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment