KnowledgeServiceImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610
  1. package com.redxun.knowledge.service;
  2. import com.alibaba.fastjson.JSON;
  3. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  4. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  5. import com.baomidou.mybatisplus.core.metadata.IPage;
  6. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  9. import com.redxun.common.base.db.BaseDao;
  10. import com.redxun.common.base.db.BaseService;
  11. import com.redxun.common.base.db.PageHelper;
  12. import com.redxun.common.base.search.QueryFilter;
  13. import com.redxun.common.model.JPaasUser;
  14. import com.redxun.common.service.impl.SuperServiceImpl;
  15. import com.redxun.common.tool.IdGenerator;
  16. import com.redxun.common.tool.StringUtils;
  17. import com.redxun.dto.user.OsUserDto;
  18. import com.redxun.knowledge.common.UserService;
  19. import com.redxun.knowledge.entity.dao.*;
  20. import com.redxun.knowledge.entity.dto.KnowledgeDto;
  21. import com.redxun.knowledge.entity.vo.KnowledgeApprovalListVo;
  22. import com.redxun.knowledge.entity.vo.KnowledgeApprovalVo;
  23. import com.redxun.knowledge.entity.vo.KnowledgeCategoryAdminVo;
  24. import com.redxun.knowledge.entity.vo.KnowledgeVo;
  25. import com.redxun.knowledge.mapper.*;
  26. import com.redxun.knowledge.utils.DeduplicationUtil;
  27. import com.redxun.knowledge.utils.PageListUtils;
  28. import com.redxun.search.service.SearchService;
  29. import lombok.extern.slf4j.Slf4j;
  30. import org.springframework.beans.BeanUtils;
  31. import org.springframework.beans.factory.annotation.Autowired;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import javax.annotation.Resource;
  35. import java.util.*;
  36. import java.util.stream.Collectors;
  37. /**
  38. * [业务--知识表]业务服务类
  39. */
  40. @Service
  41. @SuppressWarnings({"all"})
  42. @Slf4j
  43. public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Knowledge> implements BaseService<Knowledge> {
  44. @Resource
  45. private KnowledgeMapper knowledgeMapper;
  46. @Resource
  47. private KnowledgeApprovalNodeMapper knowledgeApprovalNodeMapper;
  48. @Resource
  49. private KnowledgeApproveMapper knowledgeApproveMapper;
  50. @Resource
  51. private UserService userService;
  52. @Autowired
  53. private KnowledgeCategoryServiceImpl knowledgeCategoryService;
  54. @Autowired
  55. private BannerMapper bannerMapper;
  56. @Autowired
  57. private KnowledgeCategoryMapper knowledgeCategoryMapper;
  58. @Autowired
  59. private SearchService searchService;
  60. @Override
  61. public BaseDao<Knowledge> getRepository() {
  62. return knowledgeMapper;
  63. }
  64. /**
  65. * 查询全部维基知识
  66. */
  67. public List<Knowledge> findAllWiki(String categoryId) {
  68. QueryWrapper<Knowledge> queryWrapper = new QueryWrapper<>();
  69. queryWrapper.eq("CATEGORY_ID", categoryId);
  70. queryWrapper.eq("TYPE", 2);
  71. queryWrapper.eq("APPROVAL_STATUS",5);
  72. List<Knowledge> knowledgeWikiList = knowledgeMapper.selectList(queryWrapper);
  73. return knowledgeWikiList;
  74. }
  75. /**
  76. * 新增知识
  77. * @param knowledgeDto
  78. * @return
  79. */
  80. @Transactional(rollbackFor = Exception.class)
  81. public String create(KnowledgeDto knowledgeDto) {
  82. if (knowledgeDto != null) {
  83. Knowledge knowledge = new Knowledge();
  84. knowledge.setPkId(IdGenerator.getIdStr());
  85. knowledge.setTitles(knowledgeDto.getTitles());
  86. knowledge.setCategoryId(knowledgeDto.getCategoryId());
  87. knowledge.setType(knowledgeDto.getType());
  88. knowledge.setSummary(knowledgeDto.getSummary());
  89. knowledge.setAttachment(knowledgeDto.getAttachment());
  90. knowledge.setAttachmentName(knowledgeDto.getAttachmentName());
  91. knowledge.setAttachmentType(knowledgeDto.getAttachmentType());
  92. knowledge.setContent(knowledgeDto.getContent());
  93. knowledge.setUpdateBy(userService.queryLoginUser());
  94. //knowledge.setAuthor(knowledgeDto.getAuthor());
  95. //knowledge.setCreateBy(knowledgeDto.getCreateBy());
  96. JPaasUser user = userService.queryUser(userService.queryLoginUser());
  97. if (user != null) {
  98. knowledge.setAuthor(user.getFullName());
  99. }
  100. insert(knowledge);
  101. // 从知识审批节点表拉取审批节点
  102. List<KnowledgeApprovalNode> approvalVoList = knowledgeApprovalNodeMapper.selectList(new QueryWrapper<KnowledgeApprovalNode>().eq("IS_DEL", 0).orderByAsc("IS_FINAL", "CREATE_TIME_"));
  103. if (ObjectUtils.isNotEmpty(approvalVoList)) {
  104. KnowledgeApprovalNode node;
  105. for (int index = 0; index < approvalVoList.size(); index++) {
  106. node = approvalVoList.get(index);
  107. if (node != null) {
  108. KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
  109. knowledgeApprove.setPkId(IdGenerator.getIdStr());
  110. knowledgeApprove.setName(node.getName());
  111. knowledgeApprove.setKnowledgerId(knowledge.getPkId());
  112. knowledgeApprove.setApproverId(node.getApproverId());
  113. knowledgeApprove.setApproverName(node.getApproverName());
  114. knowledgeApprove.setApprovalBatch(1);
  115. knowledgeApprove.setSort(index + 1);
  116. knowledgeApprove.setIsFinal(node.getIsFinal());
  117. knowledgeApprove.setCreateBy(userService.queryLoginUser());
  118. knowledgeApprove.setCreateTime(new Date());
  119. knowledgeApproveMapper.insert(knowledgeApprove);
  120. }
  121. }
  122. }
  123. return knowledge.getPkId();
  124. }
  125. return "";
  126. }
  127. /**
  128. * 数据回显
  129. * @param pkId
  130. * @return
  131. */
  132. public KnowledgeVo info(String pkId,Integer flag) {
  133. Knowledge knowledge = get(pkId);
  134. if (knowledge == null){
  135. return null;
  136. }
  137. List<KnowledgeApprove> approvalVoList = knowledgeApproveMapper.selectList(new QueryWrapper<KnowledgeApprove>().eq("KNOWLEDGER_ID", pkId).orderByAsc("SORT"));
  138. List<KnowledgeApprovalVo> approvals = new ArrayList<>();
  139. // 审核节点
  140. if (ObjectUtils.isNotEmpty(approvalVoList)) {
  141. KnowledgeApprove approve = null;
  142. KnowledgeApprovalVo approvalVo = null;
  143. boolean isFirstNoneApprove = true;
  144. for (int index = 0; index < approvalVoList.size(); index++) {
  145. approve = approvalVoList.get(index);
  146. approvalVo = new KnowledgeApprovalVo();
  147. approvalVo.setPkId(approve.getPkId());
  148. approvalVo.setName(approve.getName());
  149. approvalVo.setApproverId(approve.getApproverId());
  150. approvalVo.setApproverName(approve.getApproverName());
  151. approvalVo.setActualApprover(approve.getActualApprover());
  152. approvalVo.setActualApproverName(approve.getActualApproverName());
  153. approvalVo.setApprovalTime(approve.getApprovalTime());
  154. approvalVo.setSort(approve.getSort());
  155. approvalVo.setRemark(approve.getRemark());
  156. // 审核状态 :提交审核 审核通过 审核驳回
  157. if (approve.getResult() == null && isFirstNoneApprove) {
  158. if (knowledge.getApprovalStatus() == 2 || knowledge.getApprovalStatus() == 4){
  159. isFirstNoneApprove = false;
  160. approvalVo.setApprovalStatus("");
  161. } else {
  162. isFirstNoneApprove = false;
  163. approvalVo.setApprovalStatus("提交审核");
  164. }
  165. } else {
  166. if (approve.getResult() == null) {
  167. approvalVo.setApprovalStatus("");
  168. } else if (approve.getResult() == 0) {
  169. approvalVo.setApprovalStatus("审核驳回");
  170. } else if (approve.getResult() == 1) {
  171. approvalVo.setApprovalStatus("审核通过");
  172. }
  173. }
  174. approvals.add(approvalVo);
  175. }
  176. }
  177. KnowledgeVo knowledgeVo = new KnowledgeVo();
  178. if (knowledge != null) {
  179. knowledgeVo.setPkId(knowledge.getPkId());
  180. knowledgeVo.setCategoryId(knowledge.getCategoryId());
  181. knowledgeVo.setType(knowledge.getType());
  182. knowledgeVo.setTitles(knowledge.getTitles());
  183. knowledgeVo.setAuthor(knowledge.getAuthor());
  184. knowledgeVo.setContent(knowledge.getContent());
  185. knowledgeVo.setSummary(knowledge.getSummary());
  186. knowledgeVo.setAttachment(knowledge.getAttachment());
  187. knowledgeVo.setAttachmentName(knowledge.getAttachmentName());
  188. knowledgeVo.setCreateTime(knowledge.getCreateTime());
  189. knowledgeVo.setApprovalStatus(knowledge.getApprovalStatus());
  190. knowledgeVo.setCreateBy(knowledge.getCreateBy());
  191. knowledgeVo.setApprovals(approvals);
  192. knowledgeVo.setViews(knowledge.getViews());
  193. knowledgeVo.setOrganizationId(knowledge.getOrganizationId());
  194. knowledgeVo.setKnowledgeCategoryAdminVo(knowledgeCategoryService.findAllParentByCategoryId(knowledge.getCategoryId()));
  195. }
  196. if (flag != null && flag == 1){
  197. // 解析组织架构/职系/职等数据
  198. Map<String, Object> organizationIdMap = new HashMap<>();
  199. if (StringUtils.isNotEmpty(knowledge.getOrganizationId())){
  200. List<Map> mapList = JSON.parseArray(knowledge.getOrganizationId(), Map.class);
  201. for (int i = 0; i < mapList.size(); i++) {
  202. Map maps = mapList.get(i);
  203. maps.forEach((k,v) -> organizationIdMap.put((String) k,v));
  204. }
  205. }
  206. // 获取当前登录人的组织架构/职系/职等数据
  207. OsUserDto osUserDto = userService.queryOsUserDto(userService.queryLoginUser());
  208. String sequenceCode = osUserDto.getSequenceCode();
  209. String slyGrade = osUserDto.getSlyGrade();
  210. String deptId = osUserDto.getDeptId();
  211. // 如果知识最终审核通过,判断组织架构/职系/职等是否符合(前台判断)
  212. if (knowledge.getOrganizationId() == null){
  213. knowledgeMapper.updateViewsById(pkId);
  214. knowledgeVo.setIsOrganizationId(0);
  215. } else {
  216. // 如果职系,职等,组织架构id全部为空
  217. if (organizationIdMap.get("organizationId") == null && organizationIdMap.get("gradeId") == null &&
  218. organizationIdMap.get("gradeLevelId") == null){
  219. // 符合条件,增加点击量
  220. knowledgeVo.setIsOrganizationId(0);
  221. knowledgeMapper.updateViewsById(pkId);
  222. return knowledgeVo;
  223. }
  224. // 如果职系,职等为空,组织架构id不为空
  225. if (organizationIdMap.get("organizationId") != null && organizationIdMap.get("gradeId") == null &&
  226. organizationIdMap.get("gradeLevelId") == null){
  227. // 比较当前用户的组织架构是否符合条件
  228. if (deptId.equals(organizationIdMap.get("organizationId"))){
  229. // 符合条件,增加点击量
  230. knowledgeVo.setIsOrganizationId(0);
  231. knowledgeMapper.updateViewsById(pkId);
  232. return knowledgeVo;
  233. } else {
  234. // 没有权限(不增加点击量)
  235. knowledgeVo.setIsOrganizationId(1);
  236. return null;
  237. }
  238. }
  239. // 如果组织架构id,职等为空,职系不为空
  240. if (organizationIdMap.get("organizationId") == null && organizationIdMap.get("gradeId") != null &&
  241. organizationIdMap.get("gradeLevelId") == null){
  242. // 比较当前用户的职系是否符合条件
  243. if (sequenceCode.equals(organizationIdMap.get("gradeId"))){
  244. // 符合条件,增加点击量
  245. knowledgeVo.setIsOrganizationId(0);
  246. knowledgeMapper.updateViewsById(pkId);
  247. return knowledgeVo;
  248. } else {
  249. // 没有权限(不增加点击量)
  250. knowledgeVo.setIsOrganizationId(1);
  251. return null;
  252. }
  253. }
  254. // 如果组织架构id,职系为空,职等不为空
  255. if (organizationIdMap.get("organizationId") == null && organizationIdMap.get("gradeId") == null &&
  256. organizationIdMap.get("gradeLevelId") != null){
  257. // 比较当前用户的职系是否符合条件
  258. if (slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
  259. // 符合条件,增加点击量
  260. knowledgeVo.setIsOrganizationId(0);
  261. knowledgeMapper.updateViewsById(pkId);
  262. return knowledgeVo;
  263. } else {
  264. // 没有权限(不增加点击量)
  265. knowledgeVo.setIsOrganizationId(1);
  266. return null;
  267. }
  268. }
  269. // 如果职等为空,组织架构id,职系不为空
  270. if (organizationIdMap.get("organizationId") != null && organizationIdMap.get("gradeId") != null &&
  271. organizationIdMap.get("gradeLevelId") == null){
  272. if (deptId.equals(organizationIdMap.get("organizationId")) && sequenceCode.equals(organizationIdMap.get("gradeId"))){
  273. // 符合条件,增加点击量
  274. knowledgeVo.setIsOrganizationId(0);
  275. knowledgeMapper.updateViewsById(pkId);
  276. return knowledgeVo;
  277. } else {
  278. // 没有权限(不增加点击量)
  279. knowledgeVo.setIsOrganizationId(1);
  280. return null;
  281. }
  282. }
  283. // 如果职系为空,组织架构id,职等不为空
  284. if (organizationIdMap.get("organizationId") != null && organizationIdMap.get("gradeId") == null &&
  285. organizationIdMap.get("gradeLevelId") != null){
  286. if (deptId.equals(organizationIdMap.get("organizationId")) && slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
  287. // 符合条件,增加点击量
  288. knowledgeVo.setIsOrganizationId(0);
  289. knowledgeMapper.updateViewsById(pkId);
  290. return knowledgeVo;
  291. } else {
  292. // 没有权限(不增加点击量)
  293. knowledgeVo.setIsOrganizationId(1);
  294. return null;
  295. }
  296. }
  297. // 如果组织架构id为空,职系,职等不为空
  298. if (organizationIdMap.get("organizationId") == null && organizationIdMap.get("gradeId") != null &&
  299. organizationIdMap.get("gradeLevelId") != null){
  300. if (sequenceCode.equals(organizationIdMap.get("gradeId")) && slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
  301. // 符合条件,增加点击量
  302. knowledgeVo.setIsOrganizationId(0);
  303. knowledgeMapper.updateViewsById(pkId);
  304. return knowledgeVo;
  305. } else {
  306. // 没有权限(不增加点击量)
  307. knowledgeVo.setIsOrganizationId(1);
  308. return null;
  309. }
  310. }
  311. // 如果组织架构id,职系,职等都不为空
  312. if (organizationIdMap.get("organizationId") != null && organizationIdMap.get("gradeId") != null &&
  313. organizationIdMap.get("gradeLevelId") != null){
  314. if (deptId.equals(organizationIdMap.get("organizationId")) &&
  315. sequenceCode.equals(organizationIdMap.get("gradeId")) &&
  316. slyGrade.equals(organizationIdMap.get("gradeLevelId"))){
  317. knowledgeVo.setIsOrganizationId(0);
  318. // 符合条件,增加点击量
  319. knowledgeMapper.updateViewsById(pkId);
  320. return knowledgeVo;
  321. } else {
  322. // 没有权限(不增加点击量)
  323. knowledgeVo.setIsOrganizationId(1);
  324. return null;
  325. }
  326. }
  327. }
  328. }
  329. return knowledgeVo;
  330. }
  331. /**
  332. * 查看全部知识
  333. * @param filter
  334. * @return
  335. */
  336. public IPage findAllKnowledge(QueryFilter filter) {
  337. Map<String, Object> params = PageHelper.constructParams(filter);
  338. IPage page = knowledgeMapper.findAllKnowledge(filter.getPage(), filter.getParams(), params);
  339. List<KnowledgeVo> knowledgeVoList = page.getRecords();
  340. knowledgeVoList.forEach(e -> {
  341. KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = knowledgeCategoryService.findAllParentByCategoryId(e.getCategoryId());
  342. e.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVo);
  343. e.setOperatorName(userService.queryUser(e.getUpdateBy()).getFullName());
  344. Map<String, Object> map = userService.querySexAndPhoto(e.getCreateBy());
  345. e.setParams(map);
  346. });
  347. return page;
  348. }
  349. /**
  350. * 删除知识(若关联banner,则无法删除)
  351. * @param knowledgeId
  352. * @return
  353. */
  354. @Transactional(rollbackFor = Exception.class)
  355. public Boolean deleteKnowledge(String knowledgeId) {
  356. // 查看是否关联着banner
  357. Integer count = bannerMapper.selectCount(new QueryWrapper<Banner>().eq("KNOWLEDGE_ID", knowledgeId));
  358. if (count > 0){
  359. return false;
  360. }
  361. //Knowledge knowledge = knowledgeMapper.selectById(knowledgeId);
  362. //if (knowledge.getApprovalStatus() == 5){
  363. // throw new RuntimeException("知识已通过,删除失败");
  364. //}
  365. // 把知识审批表中对应数据删除掉
  366. knowledgeApproveMapper.deleteByKnowledgeId(knowledgeId);
  367. knowledgeMapper.deleteKnowledge(knowledgeId);
  368. // 调用搜索平台删除接口(删除文件)
  369. String documentId = knowledgeMapper.selectById(knowledgeId).getDocumentId();
  370. if (StringUtils.isNotEmpty(documentId)){
  371. searchService.remove(documentId);
  372. }
  373. return true;
  374. }
  375. /**
  376. * 修改知识,如当前知识在审核状态,无法修改
  377. * @param entity
  378. * @return
  379. */
  380. @Transactional(rollbackFor = Exception.class)
  381. @Override
  382. public int update(Knowledge entity) {
  383. Knowledge knowledge = this.get(entity.getPkId());
  384. // 知识为待节点审核状态和待最终审核状态,修改失败;知识为最终审核通过,修改失败
  385. if (knowledge.getApprovalStatus() == 3 || knowledge.getApprovalStatus() == 1){
  386. throw new RuntimeException("知识正在审核中,无法修改");
  387. } else {
  388. //知识被驳回了,重新修改进行审核(批次加1)
  389. entity.setApprovalStatus(1);
  390. entity.setApprovalBatch(knowledge.getApprovalBatch() + 1);
  391. //删除原有的审批节点
  392. knowledgeApproveMapper.deleteByKnowledgeId(entity.getPkId());
  393. //重新拉取审核节点
  394. List<KnowledgeApprovalNode> approvalVoList = knowledgeApprovalNodeMapper.selectList(new QueryWrapper<KnowledgeApprovalNode>().eq("IS_DEL", 0).orderByAsc("IS_FINAL", "CREATE_TIME_"));
  395. if (ObjectUtils.isNotEmpty(approvalVoList)) {
  396. KnowledgeApprovalNode node;
  397. for (int index = 0; index < approvalVoList.size(); index++) {
  398. node = approvalVoList.get(index);
  399. if (node != null) {
  400. KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
  401. knowledgeApprove.setPkId(IdGenerator.getIdStr());
  402. knowledgeApprove.setName(node.getName());
  403. knowledgeApprove.setKnowledgerId(knowledge.getPkId());
  404. knowledgeApprove.setApproverId(node.getApproverId());
  405. knowledgeApprove.setApproverName(node.getApproverName());
  406. knowledgeApprove.setApprovalBatch(1);
  407. knowledgeApprove.setSort(index + 1);
  408. knowledgeApprove.setIsFinal(node.getIsFinal());
  409. knowledgeApprove.setCreateBy(userService.queryLoginUser());
  410. knowledgeApprove.setCreateTime(new Date());
  411. knowledgeApproveMapper.insert(knowledgeApprove);
  412. }
  413. }
  414. }
  415. // 清空组织架构/职系/职等信息
  416. entity.setOrganizationId("");
  417. return this.getRepository().updateById(entity);
  418. }
  419. }
  420. /**
  421. * 查找待审核的知识(分页查询,超过99条只显示前99条记录)
  422. * @param filter
  423. * @return
  424. */
  425. public IPage findAllAuditKnowledge(QueryFilter filter) {
  426. Map<String, Object> params = PageHelper.constructParams(filter);
  427. List<KnowledgeVo> knowledgeVoList = knowledgeMapper.findAllAuditKnowledge(filter.getParams(), params);
  428. // 根据知识Id进行数据分组
  429. Map<String, List<KnowledgeVo>> result =
  430. knowledgeVoList.stream().collect(Collectors.groupingBy(KnowledgeVo::getKnowledgerId));
  431. // 结果集
  432. List<KnowledgeVo> knowledgeVoArrayList = new ArrayList<>();
  433. // 遍历每组的数据
  434. Set<Map.Entry<String, List<KnowledgeVo>>> entries = result.entrySet();
  435. for (Map.Entry<String, List<KnowledgeVo>> entry : entries) {
  436. List<KnowledgeVo> value = entry.getValue();
  437. for (int i = 0; i < value.size(); i++) {
  438. // 判断审批结果是否为null(如果审批结果没有null,证明审批已结束;如果等于0,证明审批没通过)
  439. if (value.get(i).getResult() == null) {
  440. value.get(i).setApprovalsFirst(knowledgeApproveMapper.selectById(value.get(i).getApproveId()));
  441. if (i != 0) {
  442. // 如果不是第一条数据,取前一条数据的审批时间
  443. Date approvalTime = value.get(i - 1).getApprovalTime();
  444. value.get(i).setApprovalTime(approvalTime);
  445. }
  446. // 把该记录加到结果集中
  447. knowledgeVoArrayList.add(value.get(i));
  448. break;
  449. }
  450. }
  451. }
  452. // 放入知识分类信息
  453. List<KnowledgeVo> collect = knowledgeVoArrayList.stream().
  454. sorted((t1, t2) -> t2.getCreateTime().compareTo(t1.getCreateTime())).collect(Collectors.toList());
  455. collect.forEach(e -> {
  456. String categoryId = e.getCategoryId();
  457. KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = knowledgeCategoryService.findAllParentByCategoryId(categoryId);
  458. e.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVo);
  459. });
  460. // 判断当前登录人是否可以审核每一条知识
  461. String userNo = userService.queryLoginUsername();
  462. String deptId = userService.queryLoginUserDeptId();
  463. List<KnowledgeVo> collectResult = collect.stream().
  464. filter(e -> e.getApproverId().equals(userNo) || e.getApproverId().equals(deptId)).collect(Collectors.toList());
  465. Page pages = PageListUtils.getPages(filter.getPage().getCurrent(), filter.getPage().getSize(), collectResult);
  466. return pages;
  467. }
  468. /**
  469. * 根据分类id查询工作成果列表和经验案例列表
  470. * @param filter
  471. * @return
  472. */
  473. public IPage getAllKnowledgeByCategoryId(QueryFilter filter) {
  474. Map<String, Object> params = PageHelper.constructParams(filter);
  475. IPage page = knowledgeMapper.getAllKnowledgeByCategoryId(filter.getPage(), filter.getParams(), params);
  476. List<KnowledgeVo> knowledgeVoList = page.getRecords();
  477. knowledgeVoList.forEach(e -> {
  478. KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = knowledgeCategoryService.findAllParentByCategoryId(e.getCategoryId());
  479. e.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVo);
  480. });
  481. List<KnowledgeVo> result = new ArrayList<>(knowledgeVoList);
  482. knowledgeVoList.forEach(e -> {
  483. //把一级分类下的分类的知识加入返回结果集
  484. KnowledgeCategory knowledgeCategory = knowledgeCategoryMapper.selectById(e.getCategoryId());
  485. KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = new KnowledgeCategoryAdminVo();
  486. BeanUtils.copyProperties(knowledgeCategory,knowledgeCategoryAdminVo);
  487. knowledgeCategoryAdminVo.setLevel(1);
  488. List<KnowledgeCategoryAdminVo> childrens = knowledgeCategoryService.findChildrens(knowledgeCategoryAdminVo);
  489. childrens.forEach(children -> {
  490. List<Knowledge> knowledgeList = this.baseMapper.selectList(new QueryWrapper<Knowledge>().eq("CATEGORY_ID", children.getPkId()));
  491. List<KnowledgeVo> collect = knowledgeList.stream().map(h -> {
  492. KnowledgeVo knowledgeVo = new KnowledgeVo();
  493. BeanUtils.copyProperties(h, knowledgeVo);
  494. return knowledgeVo;
  495. }).collect(Collectors.toList());
  496. collect.forEach(g -> {
  497. KnowledgeCategoryAdminVo knowledgeCategoryAdminVos = knowledgeCategoryService.findAllParentByCategoryId(g.getCategoryId());
  498. g.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVos);
  499. });
  500. result.addAll(collect);
  501. });
  502. });
  503. // 按照浏览量降序排序
  504. List<KnowledgeVo> collect = result.stream().
  505. sorted((t1, t2) -> t2.getViews().compareTo(t1.getViews())).
  506. map(e -> {
  507. Map<String, Object> map = userService.querySexAndPhoto(e.getCreateBy());
  508. e.setParams(map);
  509. return e;
  510. }).
  511. collect(Collectors.toList());
  512. page.setRecords(collect);
  513. page.setTotal(collect.size());
  514. return page;
  515. }
  516. /**
  517. * 获取当前人未审核知识的数量
  518. * @return
  519. */
  520. public Integer getAuditKnowledgeSum() {
  521. List<KnowledgeVo> knowledgeVoList = knowledgeMapper.countAuditKnowledge();
  522. // 根据知识Id进行数据分组
  523. Map<String, List<KnowledgeVo>> result =
  524. knowledgeVoList.stream().collect(Collectors.groupingBy(KnowledgeVo::getKnowledgerId));
  525. // 结果集
  526. List<KnowledgeVo> knowledgeVoArrayList = new ArrayList<>();
  527. // 遍历每组的数据
  528. Set<Map.Entry<String, List<KnowledgeVo>>> entries = result.entrySet();
  529. for (Map.Entry<String, List<KnowledgeVo>> entry : entries) {
  530. List<KnowledgeVo> value = entry.getValue();
  531. for (int i = 0; i < value.size(); i++) {
  532. // 判断审批结果是否为null(如果审批结果没有null,证明审批已结束;如果等于0,证明审批没通过)
  533. if (value.get(i).getResult() == null) {
  534. if (i != 0) {
  535. // 如果不是第一条数据,取前一条数据的审批时间
  536. Date approvalTime = value.get(i - 1).getApprovalTime();
  537. value.get(i).setApprovalTime(approvalTime);
  538. // 把该记录加到结果集中
  539. knowledgeVoArrayList.add(value.get(i));
  540. break;
  541. }
  542. }
  543. }
  544. }
  545. String userNo = userService.queryLoginUsername();
  546. String deptId = userService.queryLoginUserDeptId();
  547. List<KnowledgeVo> collectResult = knowledgeVoArrayList.stream().
  548. filter(e -> e.getApproverId().equals(userNo) || e.getApproverId().equals(deptId)).collect(Collectors.toList());
  549. if (collectResult.size() >= 99){
  550. return 99;
  551. } else if (collectResult.size() <= 0){
  552. return 0;
  553. }else {
  554. return collectResult.size();
  555. }
  556. }
  557. /**
  558. * 前台获取登录人上传文件数量
  559. * @return
  560. */
  561. public Integer getKnowledgeSum() {
  562. LambdaQueryWrapper<Knowledge> wrapper = new LambdaQueryWrapper<>();
  563. String loginUser = userService.queryLoginUser();
  564. wrapper.eq(Knowledge::getApprovalStatus,5).eq(Knowledge::getCreateBy,loginUser);
  565. return knowledgeMapper.selectCount(wrapper);
  566. }
  567. }