提交 d86f28c5 作者: yanxin

个人素材管理相关接口

上级 ad477b96
......@@ -4,6 +4,8 @@ import java.util.HashMap;
import java.util.Map;
public class Constants {
//个人素材知识库id
public static final String SC_USER = "1826201830565163010";
//redis缓存 key常量
public static final String FINANCE = "SAVE_ES:";
public static final String RESEARCH = "RESEARCH:";
......
package com.zzsn.knowbase.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.zzsn.knowbase.constant.Constants;
import com.zzsn.knowbase.entity.*;
import com.zzsn.knowbase.service.IKnowledgeService;
import com.zzsn.knowbase.service.ILocalFileService;
import com.zzsn.knowbase.service.KbKnowledgeProjectService;
import com.zzsn.knowbase.util.AuthUtil;
import com.zzsn.knowbase.util.ExcelExportUtil;
import com.zzsn.knowbase.util.SpringContextUtils;
import com.zzsn.knowbase.vo.KnowledgeParam;
import com.zzsn.knowbase.vo.KnowledgeVO;
import com.zzsn.knowbase.vo.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.util.WebUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
/**
* 知识
* @Author: chenshiqiang
* @Version: V1.0
*/
@Api(tags = "知识")
@RestController
@RequestMapping("/api/knowledge/user")
@Slf4j
public class KnowledgeUserController {
@Autowired
private IKnowledgeService knowledgeService;
@Autowired
private KbKnowledgeProjectService knowledgeProjectService;
@Autowired
private ILocalFileService localFileService;
/**
* 新增用户分组
*/
@PostMapping(value = "/group/add")
public Result<?> groupAdd(@RequestBody KbKnowledgeProject knowledgeProject) {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
knowledgeProject.setPid(loginUser.getId());
knowledgeProject.setFullPath(loginUser.getId());
knowledgeProject.setHasChild("0");
knowledgeProject.setCategory("user");
knowledgeProject.setCreateTime(new Date());
log.info("新增用户分组:{}", knowledgeProject);
knowledgeProjectService.save(knowledgeProject);
return Result.OK("保存成功!");
}
/**
* 查询用户分组
*/
@GetMapping(value = "/group/list")
public Result<?> groupList() {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
List<KbKnowledgeProject> list = knowledgeProjectService.listByUserId(loginUser.getId());
return Result.OK(list);
}
/**
* 查询用户分组
*/
@PutMapping(value = "/group/edit")
public Result<?> groupEdit(@RequestBody KbKnowledgeProject knowledgeProject) {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
KbKnowledgeProject byId = knowledgeProjectService.getById(knowledgeProject.getId());
if(byId == null || !loginUser.getId().equals(byId.getPid())){
return Result.error("分类不存在!");
}
byId.setTypeName(knowledgeProject.getTypeName());
log.info("编辑用户分组:{}", byId);
knowledgeProjectService.updateById(byId);
return Result.OK("编辑成功!");
}
/**
* 查询用户分组
*/
@DeleteMapping(value = "/group/delete")
public Result<?> groupDelete(String id) {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
KbKnowledgeProject byId = knowledgeProjectService.getById(id);
if(byId == null || !loginUser.getId().equals(byId.getPid())){
return Result.error("分类不存在!");
}
log.info("删除用户分组:{}", byId);
knowledgeProjectService.removeById(id);
return Result.OK("删除成功!");
}
/**
* 分页列表查询
*/
@GetMapping(value = "/list")
public Result<?> queryPageList(KnowledgeParam knowledgeParam,
@RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
@RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
@RequestParam(name = "column", defaultValue = "common") String column,
@RequestParam(name = "order", defaultValue = "desc") String order,
HttpServletRequest request) {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
knowledgeParam.setKbKnowledgeId(Constants.SC_USER);
knowledgeParam.setUserId(loginUser.getId());
IPage<KnowledgeVO> pageList = knowledgeService.queryPageList(knowledgeParam, pageNo, pageSize, column, order);
return Result.OK(pageList);
}
/**
* 添加
*
* @param knowledge
* @return
*/
@ApiOperation(value = "知识-添加", notes = "知识-添加")
@PostMapping(value = "/uploadKnowledge")
public Result<?> uploadKnowledge(HttpServletRequest request, Knowledge knowledge) {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
knowledge.setUserId(loginUser.getId());
//对应个人素材知识库
knowledge.setKbKnowledgeId(Constants.SC_USER);
MultipartHttpServletRequest multipartRequest = WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class);
Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
Result<List<KnowFile>> result = localFileService.upload(fileMap);
log.info("upload result:{}", result);
if (!Integer.valueOf("200").equals(result.getCode())) {
return Result.error(result.getMessage());
}
List<KnowFile> resultList = result.getResult();
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
knowledge.setImportData(0);
CompletableFuture.runAsync(() -> this.add(resultList, knowledge, userInfo));
return Result.OK("添加成功!");
}
private void add(List<KnowFile> resultList, Knowledge knowledge, KbAuthorizedUser userInfo) {
if (null == resultList || resultList.isEmpty()) {
return;
}
for (KnowFile knowFileResult : resultList) {
knowledge.setId(null);
knowledge.setTitle(null);
knowledgeService.addKnowledge(knowFileResult, knowledge, userInfo);
}
}
/**
* 编辑
*
* @param knowledge
* @return
*/
@ApiOperation(value = "信息源组类别-编辑", notes = "信息源组类别-编辑")
@PutMapping(value = "/edit")
public Result<?> edit(@RequestBody Knowledge knowledge) {
knowledgeService.updateKnowledge(knowledge);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
*
* @param
* @return
*/
@PostMapping(value = "/delete")
public Result<?> delete(@RequestBody DeleteParam deleteParam) {
knowledgeService.deleteKnowledge(deleteParam.getKnowledgeList());
return Result.OK("删除成功!");
}
/**
* 通过excel导入
*
* @return
*/
@RequestMapping(value = "/importInfo", method = RequestMethod.POST)
public Result<?> importInfo(HttpServletRequest request, HttpServletResponse response) {
LoginUser loginUser = AuthUtil.getLoginUser();
if(loginUser == null){
return Result.error("用户未登录!");
}
return knowledgeService.doImportInfo(request, loginUser.getId());
}
/**
* 下载导入模板
*/
@RequestMapping(value = "/download")
public Result<?> download(HttpServletRequest request, HttpServletResponse response) {
try {
List<KnowledgeUserExcel> dataList = new ArrayList<>();
String filePath = Constants.TEMP_FILES_DIR + "template.xlsx";
ExcelExportUtil.writeExcelFront(dataList, "素材导入模板", filePath, KnowledgeUserExcel.class);
ExcelExportUtil.download(response, filePath, true);
} catch (Exception e) {
e.printStackTrace();
}
return Result.OK();
}
}
\ No newline at end of file
......@@ -119,7 +119,10 @@ public class Knowledge implements Serializable {
* 0word 1excel&subject 2ppt 3pdf
*/
private Integer importData;
/**
* 个人素材所属用户id
*/
private String userId;
}
package com.zzsn.knowbase.entity;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Description: 知识
* @Author: chenshiqiang
* @Version: V1.0
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class KnowledgeUserExcel {
@ExcelProperty(value = "标题", index = 0)
private String title;
@ExcelProperty(value = "正文", index = 1)
private String contentWithTag;
@ExcelProperty(value = "作者", index = 2)
private String author;
@ExcelProperty(value = "来源", index = 3)
private String origin;
@ExcelProperty(value = "发布时间", index = 4)
private String publishDate;
@ExcelProperty(value = "原文链接", index = 5)
private String sourceAddress;
}
package com.zzsn.knowbase.entity;
import java.util.Date;
import java.util.List;
import org.springframework.format.annotation.DateTimeFormat;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* <p>
* 在线用户信息
* </p>
*
* @Author scott
* @since 2018-12-20
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
public class LoginUser {
/**
* 登录人id
*/
private String id;
/**
* 登录人账号
*/
private String username;
/**
* 登录人名字
*/
private String realname;
/**
* 登录人密码
*/
private String password;
/**
* md5密码盐
*/
private String salt;
/**
* 当前登录部门code
*/
private String orgCode;
/**
* 头像
*/
private String avatar;
/**
* 生日
*/
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
/**
* 性别(1:男 2:女)
*/
private Integer sex;
/**
* 电子邮件
*/
private String email;
/**
* 电话
*/
private String phone;
/**
* 状态(1:正常 2:冻结 )
*/
private Integer status;
private Integer delFlag;
/**
* 同步工作流引擎1同步0不同步
*/
private Integer activitiSync;
/**
* 创建时间
*/
private Date createTime;
/**
* 身份(1 普通员工 2 上级)
*/
private Integer userIdentity;
/**
* 管理部门ids
*/
private String departIds;
/**
* 职务,关联职务表
*/
private String post;
/**
* 座机号
*/
private String telephone;
/**多租户id配置,编辑用户的时候设置*/
private String relTenantIds;
/**设备id uniapp推送用*/
private String clientId;
/**1-超级用户;2-普通用户;3-管理员用户(租户下)*/
private Integer category;
private List<String> roles;
/**用户绑定的角色所属的项目的id集合*/
List<String> projectIds;
}
......@@ -47,4 +47,6 @@ public interface KbKnowledgeProjectService extends IService<KbKnowledgeProject>
List<String> getKnowledgeListByUserId(String userId,List<String> knowProjectIdList );
List<KbAuthuserKnowledgeprojectMap> getKnowledgeProjectListByUserId(String userId);
List<KbKnowledgeProject> listByUserId(String userid);
}
......@@ -354,6 +354,14 @@ public class KbKnowledgeProjectServiceImpl extends ServiceImpl<KbKnowledgeProjec
.eq(KbAuthuserKnowledgeprojectMap::getAuthUserId,userId));
}
@Override
public List<KbKnowledgeProject> listByUserId(String userid) {
LambdaQueryWrapper<KbKnowledgeProject> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(KbKnowledgeProject::getPid,userid);
queryWrapper.orderByDesc(KbKnowledgeProject::getCreateBy);
return this.list(queryWrapper);
}
/**
* 根据所传pid查询旧的父级节点的子节点并修改相应状态值
* @param pid
......
......@@ -388,7 +388,6 @@ class KnowledgeServiceImpl implements IKnowledgeService {
//修改为标记删除
esOpUtil.docUpdateById(Constants.ES_DATA_FOR_KNOWLEDGE, knowledge.getId(), JSON.toJSONString(knowledge));
}
CompletableFuture.runAsync(() -> {
for (Knowledge knowledge : knowledgeList) {
deleteForPython(knowledge.getId(), knowledge.getKbKnowledgeId());
......@@ -411,17 +410,18 @@ class KnowledgeServiceImpl implements IKnowledgeService {
@Override
public IPage<KnowledgeVO> queryPageList(KnowledgeParam knowledgeParam, Integer pageNo, Integer pageSize, String column, String order) {
List<String> catList;
//分类id列表
List<String> catList = new ArrayList<>();
//查看全部且是非管理员的时候
List<String> knowPermitList = new ArrayList<>();
if(StringUtils.isNotEmpty(knowledgeParam.getKnowledgeProjectId()) && StringUtils.isEmpty(knowledgeParam.getUserId())){
List<String> treeList = knowledgeProjectService.getTreeListBy(knowledgeParam.getKnowledgeProjectId())
.stream().map(KbKnowledgeProject::getId).collect(Collectors.toList());
log.info("treeList===={}", treeList.toString());
//获取用户拥有的分类
KbAuthorizedUser userInfo = SpringContextUtils.getUserInfo();
if (null == userInfo) {
return null;
}
//查看全部且是非管理员的时候
List<String> knowPermitList = new ArrayList<>();
if (!Integer.valueOf("0").equals(userInfo.getIsAll())) {
Map<String, Boolean> userKnowProjectSigns = authorizedUserService.getUserKnowProjectSigns(treeList, userInfo.getId());
log.info("userKnowProjectSigns=={}", userKnowProjectSigns.toString());
......@@ -440,6 +440,9 @@ class KnowledgeServiceImpl implements IKnowledgeService {
} else {
catList = treeList;
}
}else if(StringUtils.isNotEmpty(knowledgeParam.getKnowledgeProjectId())){
catList = Arrays.asList(knowledgeParam.getKnowledgeProjectId().split(","));
}
SearchRequest searchRequest = new SearchRequest(Constants.ES_DATA_FOR_KNOWLEDGE);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
//设置分页参数
......@@ -523,18 +526,21 @@ class KnowledgeServiceImpl implements IKnowledgeService {
if (StringUtils.isNotEmpty(knowledgeParam.getOrigin())) {
boolQuery.must(QueryBuilders.matchQuery("origin", knowledgeParam.getOrigin()));
}
if (StringUtils.isNotEmpty(knowledgeParam.getUserId())) {
boolQuery.must(QueryBuilders.matchQuery("userId", knowledgeParam.getUserId()));
}
if (StringUtils.isNotEmpty(knowledgeParam.getVerifierName())) {
boolQuery.must(QueryBuilders.matchPhraseQuery("verifierName", knowledgeParam.getVerifierName()));
}
BoolQueryBuilder outer = new BoolQueryBuilder();
if (!knowPermitList.isEmpty()) {
BoolQueryBuilder boolQueryColumn = new BoolQueryBuilder();
boolQueryColumn.must(QueryBuilders.termsQuery("id", knowPermitList));
outer.should(boolQueryColumn);
}
if (!catList.isEmpty()) {
boolQuery.must(QueryBuilders.termsQuery("knowledgeProjectId", catList));
}
if (StringUtils.isNotEmpty(knowledgeParam.getTypeIds())) {
boolQuery.must(QueryBuilders.termsQuery("typeId", Arrays.asList(knowledgeParam.getTypeIds().split(","))));
}
......@@ -767,6 +773,10 @@ class KnowledgeServiceImpl implements IKnowledgeService {
@Override
public void doExcel(HttpServletRequest request, String fileSuffix, String userId) {
String kbKnowledgeId = request.getParameter("kbKnowledgeId");
if(request.getRequestURI().contains("/user/")){
//个人素材上传
kbKnowledgeId = Constants.SC_USER;
}
String knowledgeProjectId = request.getParameter("knowledgeProjectId");
String typeId = request.getParameter("typeId");
try {
......@@ -777,7 +787,7 @@ class KnowledgeServiceImpl implements IKnowledgeService {
// 将MultipartFile的文件内容保存到字节数组
byte[] fileData = multipartFile.getBytes();
List<List<String>> lists = ExcelExportUtil.readExcel(new ByteArrayInputStream(fileData), 1, 8);
List<List<String>> lists = ExcelExportUtil.readExcel(new ByteArrayInputStream(fileData), 0, 8);
//存入es
importInfo(lists, kbKnowledgeId, knowledgeProjectId, typeId, userId);
} catch (Exception e) {
......@@ -882,7 +892,9 @@ class KnowledgeServiceImpl implements IKnowledgeService {
//导入发布库数据
public void importInfo(List<List<String>> lists, String kbKnowledgeId, String knowledgeProjectId, String typeId, String createBy) {
for (List<String> info : lists) {
List<String> titles = lists.get(0);
for (int i = 1; i < lists.size(); i++) {
List<String> info = lists.get(i);
try {
Knowledge specialInformation = Knowledge.builder()
.kbKnowledgeId(kbKnowledgeId)
......@@ -891,21 +903,25 @@ class KnowledgeServiceImpl implements IKnowledgeService {
.createBy(createBy)
.verifyStatus(0)
.importData(1)
.userId(createBy)
.build();
if (StringUtils.isNotEmpty(info.get(0))) {
specialInformation.setId(info.get(0));
if (titles.contains("id") && StringUtils.isNotEmpty(info.get(titles.indexOf("id")))) {
specialInformation.setId(info.get(titles.indexOf("id")));
}else{
specialInformation.setId(codeGenerateUtil.geneIdNo(Constants.FINANCE, 8));
}
if (StringUtils.isNotEmpty(info.get(1))) {
specialInformation.setTitle(info.get(1));
if (StringUtils.isNotEmpty(info.get(titles.indexOf("标题")))) {
specialInformation.setTitle(info.get(titles.indexOf("标题")));
} else {
log.error("上传的数据{}标题为空,此条数据忽略", info.get(0));
log.error("上传的数据{}标题为空,此条数据忽略", info);
continue;
}
String contentWithTag = info.get(3);
String contentWithTag = null;
if(titles.contains("正文(带标签)")){
contentWithTag = info.get(titles.indexOf("正文(带标签)"));
}
if(StringUtils.isEmpty(contentWithTag)){
contentWithTag = info.get(2);
contentWithTag = info.get(titles.indexOf("正文"));
}
if (StringUtils.isNotEmpty(contentWithTag)) {
specialInformation.setContentWithTag(contentWithTag);
......@@ -922,20 +938,20 @@ class KnowledgeServiceImpl implements IKnowledgeService {
}
specialInformation.setContents(contents);
} else {
log.error("上传的数据{}正文为空,此条数据忽略", info.get(1));
log.error("上传的数据{}正文为空,此条数据忽略", info);
continue;
}
if (info.size()>4&&StringUtils.isNotEmpty(info.get(4))) {
specialInformation.setAuthor(info.get(4));
if (info.size()>4&&StringUtils.isNotEmpty(info.get(titles.indexOf("作者")))) {
specialInformation.setAuthor(info.get(titles.indexOf("作者")));
}
if (info.size()>5&&StringUtils.isNotEmpty(info.get(5))) {
specialInformation.setOrigin(info.get(5));
if (info.size()>5&&StringUtils.isNotEmpty(info.get(titles.indexOf("来源")))) {
specialInformation.setOrigin(info.get(titles.indexOf("来源")));
}
if (info.size()>6&&StringUtils.isNotEmpty(info.get(6))) {
specialInformation.setPublishDate(EsDateUtil.esFieldDateFormat(info.get(6)));
if (info.size()>6&&StringUtils.isNotEmpty(info.get(titles.indexOf("发布时间")))) {
specialInformation.setPublishDate(EsDateUtil.esFieldDateFormat(info.get(titles.indexOf("发布时间"))));
}
if (info.size()>7&&StringUtils.isNotEmpty(info.get(7))) {
specialInformation.setSourceAddress(info.get(7));
if (info.size()>7&&StringUtils.isNotEmpty(info.get(titles.indexOf("原文链接")))) {
specialInformation.setSourceAddress(info.get(titles.indexOf("原文链接")));
}
specialInformation.setDeleteFlag(0);
specialInformation.setCreateTime(EsDateUtil.esFieldDateFormat(cn.hutool.core.date.DateUtil.formatDateTime(new Date())));
......
package com.zzsn.knowbase.util;
import com.alibaba.fastjson.JSON;
import com.zzsn.knowbase.entity.LoginUser;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.text.SimpleDateFormat;
import java.util.*;
public class AuthUtil {
static SimpleDateFormat format;
public static LoginUser getLoginUser() {
try {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String userInfo = request.getHeader("loginUser");
return JSON.parseObject(userInfo, LoginUser.class);
}catch (Exception e){
return null;
}
}
}
......@@ -42,7 +42,7 @@ public class KnowledgeParam {
*/
private String verifierName;
/**
* 知识库id
* 分类id
*/
private String knowledgeProjectId;
/**
......@@ -77,7 +77,15 @@ public class KnowledgeParam {
* 审核结束时间
*/
private String verifyEndTime;
/**
* 知识库id
*/
private String kbKnowledgeId;
private String subjectId;
/**
* 个人素材所属用户id
*/
private String userId;
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论