KnowledgeServiceImpl.java 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070
  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.redxun.common.base.db.BaseDao;
  9. import com.redxun.common.base.db.BaseService;
  10. import com.redxun.common.base.db.PageHelper;
  11. import com.redxun.common.base.entity.IUser;
  12. import com.redxun.common.base.search.QueryFilter;
  13. import com.redxun.common.constant.MBoolean;
  14. import com.redxun.common.model.JPaasUser;
  15. import com.redxun.common.service.impl.SuperServiceImpl;
  16. import com.redxun.common.tool.IdGenerator;
  17. import com.redxun.common.tool.StringUtils;
  18. import com.redxun.common.utils.ContextUtil;
  19. import com.redxun.dto.user.OsGroupDto;
  20. import com.redxun.dto.user.OsUserDto;
  21. import com.redxun.knowledge.album.entity.dao.AlbumCatalogueKnowledge;
  22. import com.redxun.knowledge.album.mapper.AlbumCatalogueKnowledgeMapper;
  23. import com.redxun.knowledge.common.MessageService;
  24. import com.redxun.knowledge.common.UserService;
  25. import com.redxun.knowledge.entity.dao.*;
  26. import com.redxun.knowledge.entity.dto.KnowledgeDto;
  27. import com.redxun.knowledge.entity.dto.OrganizationDto;
  28. import com.redxun.knowledge.entity.dto.TransferAuthorDto;
  29. import com.redxun.knowledge.entity.dto.TransferKnowledgeCategoryDto;
  30. import com.redxun.knowledge.entity.vo.*;
  31. import com.redxun.knowledge.map.entity.dao.MapContent;
  32. import com.redxun.knowledge.map.mapper.MapContentMapper;
  33. import com.redxun.knowledge.mapper.*;
  34. import com.redxun.knowledge.utils.ObjectUtil;
  35. import com.redxun.knowledge.utils.PageListUtils;
  36. import com.redxun.search.service.SearchService;
  37. import lombok.extern.slf4j.Slf4j;
  38. import org.springframework.beans.BeanUtils;
  39. import org.springframework.beans.factory.annotation.Autowired;
  40. import org.springframework.stereotype.Service;
  41. import org.springframework.transaction.annotation.Transactional;
  42. import org.springframework.util.CollectionUtils;
  43. import javax.annotation.Resource;
  44. import java.util.*;
  45. import java.util.concurrent.atomic.AtomicBoolean;
  46. import java.util.stream.Collectors;
  47. /**
  48. * [业务--知识表]业务服务类
  49. */
  50. @Service
  51. @SuppressWarnings({"all"})
  52. @Slf4j
  53. public class KnowledgeServiceImpl extends SuperServiceImpl<KnowledgeMapper, Knowledge> implements BaseService<Knowledge> {
  54. @Resource
  55. private KnowledgeMapper knowledgeMapper;
  56. @Resource
  57. private KnowledgeApprovalNodeMapper knowledgeApprovalNodeMapper;
  58. @Resource
  59. private KnowledgeApproveMapper knowledgeApproveMapper;
  60. @Resource
  61. private UserService userService;
  62. @Autowired
  63. private KnowledgeCategoryServiceImpl knowledgeCategoryService;
  64. @Autowired
  65. private BannerMapper bannerMapper;
  66. @Autowired
  67. private KnowledgeCategoryMapper knowledgeCategoryMapper;
  68. @Autowired
  69. private SearchService searchService;
  70. @Autowired
  71. private ActionLogMapper actionLogMapper;
  72. @Autowired
  73. private MessageService messageService;
  74. @Autowired
  75. private KnowledgeApproveServiceImpl knowledgeApproveService;
  76. @Autowired
  77. private MapContentMapper mapContentMapper;
  78. @Autowired
  79. private AlbumCatalogueKnowledgeMapper albumCatalogueKnowledgeMapper;
  80. @Autowired
  81. private KnowledgeApprovalNodeServiceImpl knowledgeApprovalNodeService;
  82. @Autowired
  83. private KnowledgeCpMapper knowledgeCpMapper;
  84. @Autowired
  85. private KnowledgeAgentServiceImpl knowledgeAgentService;
  86. @Override
  87. public BaseDao<Knowledge> getRepository() {
  88. return knowledgeMapper;
  89. }
  90. /**
  91. * 查询全部维基知识
  92. */
  93. public List<Knowledge> findAllWiki(String categoryId) {
  94. List<Knowledge> knowledgeWikiList = knowledgeMapper.findAllWiki(categoryId);
  95. return knowledgeWikiList;
  96. }
  97. /**
  98. * 新增知识
  99. *
  100. * @param knowledgeDto
  101. * @return
  102. */
  103. @Transactional(rollbackFor = Exception.class)
  104. public String create(KnowledgeDto knowledgeDto,KnowledgeCp knowledgecp) {
  105. if (knowledgeDto != null && knowledgecp != null){
  106. throw new RuntimeException("未知错误");
  107. }
  108. Knowledge knowledge = new Knowledge();
  109. IUser users = ContextUtil.getCurrentUser();
  110. if (knowledgeDto != null) {
  111. if (Objects.isNull(knowledgeCategoryMapper.selectById(knowledgeDto.getCategoryId())) && knowledgeDto.getIsDraft() == 1){
  112. throw new RuntimeException("输入的分类不存在,请重新输入");
  113. }
  114. knowledge.setPkId(IdGenerator.getIdStr());
  115. knowledge.setTitles(knowledgeDto.getTitles());
  116. knowledge.setCategoryId(knowledgeDto.getCategoryId());
  117. knowledge.setType(knowledgeDto.getType());
  118. knowledge.setSummary(knowledgeDto.getSummary());
  119. knowledge.setAttachment(knowledgeDto.getAttachment());
  120. knowledge.setAttachmentName(knowledgeDto.getAttachmentName());
  121. knowledge.setAttachmentType(knowledgeDto.getAttachmentType());
  122. if (knowledgeDto.getIsDraft() != null && knowledgeDto.getIsDraft() == 0){
  123. knowledge.setApprovalStatus(6);
  124. knowledge.setApprovalBatch(0);
  125. knowledge.setIsDraft(0);
  126. } else {
  127. knowledge.setApprovalStatus(1);
  128. knowledge.setApprovalBatch(1);
  129. knowledge.setIsDraft(1);
  130. }
  131. knowledge.setContent(knowledgeDto.getContent());
  132. knowledge.setCreateDepId(users.getDeptId());
  133. knowledge.setTenantId(users.getTenantId());
  134. knowledge.setCompanyId(users.getCompanyId());
  135. knowledge.setCreateBy(users.getUserId());
  136. knowledge.setCreateTime(new Date());
  137. knowledge.setUpdateBy(users.getUserId());
  138. knowledge.setUpdateTime(new Date());
  139. knowledge.setDownloadUserId(knowledgeDto.getDownloadUserId());
  140. knowledge.setDownloadDeptId(knowledgeDto.getDownloadDeptId());
  141. if (!ObjectUtil.valueAllNull(knowledgeDto.getOrganizationIds())){
  142. String organizationId = JSON.toJSON(knowledgeDto.getOrganizationIds()).toString();
  143. knowledge.setOrganizationId(organizationId);
  144. }
  145. JPaasUser user = userService.queryUser(userService.queryLoginUser());
  146. if (user != null) {
  147. knowledge.setAuthor(user.getFullName());
  148. }
  149. insert(knowledge);
  150. }
  151. if (knowledgecp != null){
  152. BeanUtils.copyProperties(knowledgecp,knowledge);
  153. insert(knowledge);
  154. }
  155. // 从知识审批节点表拉取审批节点(不是草稿则拉取)
  156. if (knowledge.getIsDraft() != null && knowledge.getIsDraft() == 1) {
  157. List<KnowledgeApprovalNodeVo> approvalVoList = getKnowledgeApprovalNode(knowledge.getCategoryId(),knowledge.getCreateBy());
  158. if (ObjectUtils.isNotEmpty(approvalVoList)) {
  159. KnowledgeApprovalNodeVo node;
  160. for (int index = 0; index < approvalVoList.size(); index++) {
  161. node = approvalVoList.get(index);
  162. if (node != null) {
  163. KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
  164. knowledgeApprove.setPkId(IdGenerator.getIdStr());
  165. knowledgeApprove.setName(node.getName());
  166. knowledgeApprove.setKnowledgerId(knowledge.getPkId());
  167. knowledgeApprove.setApproverId(node.getApproverId());
  168. knowledgeApprove.setApproverName(node.getApproverName());
  169. knowledgeApprove.setApprovalBatch(1);
  170. knowledgeApprove.setUpdateBy(users.getUserId());
  171. knowledgeApprove.setSort(index + 1);
  172. knowledgeApprove.setIsFinal(node.getIsFinal());
  173. knowledgeApprove.setCreateBy(userService.queryLoginUser());
  174. knowledgeApprove.setCreateTime(new Date());
  175. knowledgeApproveMapper.insert(knowledgeApprove);
  176. }
  177. }
  178. }
  179. }
  180. return knowledge.getPkId();
  181. }
  182. /**
  183. * 拉取审核流程
  184. * @param category
  185. * @return
  186. */
  187. private List<KnowledgeApprovalNodeVo> getKnowledgeApprovalNode(String category,String userId){
  188. List<KnowledgeApprovalNodeVo> knowledgeApprovalNodeVoList = knowledgeApprovalNodeService.findAllNodesByCategoryId(category,userId);
  189. return knowledgeApprovalNodeVoList;
  190. }
  191. /**
  192. * 数据回显
  193. *
  194. * @param pkId
  195. * @return
  196. */
  197. public KnowledgeVo info(String pkId, Integer flag) {
  198. Knowledge knowledge = get(pkId);
  199. if (knowledge == null) {
  200. return null;
  201. }
  202. if (flag != null && flag == 1 && knowledge.getApprovalStatus() != 5 && !knowledge.getCreateBy().equals(userService.queryLoginUser())){
  203. throw new RuntimeException("您查看的知识还未完成审核流程!");
  204. }
  205. KnowledgeVo knowledgeVo = new KnowledgeVo();
  206. if (knowledge != null) {
  207. knowledgeVo.setPkId(knowledge.getPkId());
  208. knowledgeVo.setCategoryId(knowledge.getCategoryId());
  209. knowledgeVo.setType(knowledge.getType());
  210. knowledgeVo.setTitles(knowledge.getTitles());
  211. knowledgeVo.setAuthor(knowledge.getAuthor());
  212. knowledgeVo.setContent(knowledge.getContent());
  213. knowledgeVo.setSummary(knowledge.getSummary());
  214. knowledgeVo.setAttachment(knowledge.getAttachment());
  215. knowledgeVo.setAttachmentName(knowledge.getAttachmentName());
  216. knowledgeVo.setCreateTime(knowledge.getCreateTime());
  217. knowledgeVo.setApprovalStatus(knowledge.getApprovalStatus());
  218. knowledgeVo.setCreateBy(knowledge.getCreateBy());
  219. knowledgeVo.setViews(knowledge.getViews());
  220. knowledgeVo.setDownloadUserId(knowledge.getDownloadUserId());
  221. knowledgeVo.setDownloadDeptId(knowledge.getDownloadDeptId());
  222. //组织架构解析后返回
  223. if (!StringUtils.isEmpty(knowledge.getOrganizationId())){
  224. OrganizationDto organizationDto = JSON.parseObject(knowledge.getOrganizationId(), OrganizationDto.class);
  225. knowledgeVo.setOrganizationIds(organizationDto);
  226. }
  227. if (!StringUtils.isEmpty(knowledge.getCategoryId())){
  228. knowledgeVo.setKnowledgeCategoryAdminVo(knowledgeCategoryService.findAllParentByCategoryId(knowledge.getCategoryId()));
  229. }
  230. //指定了附件下载权限会判断
  231. if (StringUtils.isNotEmpty(knowledge.getDownloadUserId()) || StringUtils.isNotEmpty(knowledge.getDownloadDeptId())){
  232. //附件下载权限
  233. knowledgeVo.setIsAllowDownload(isAllowDownload(knowledge.getDownloadUserId(),knowledge.getDownloadDeptId()));
  234. //附件可下载人员或部门字符串复制
  235. if (StringUtils.isNotEmpty(knowledge.getDownloadUserId())){
  236. List<String> fullNameList = knowledgeMapper.selectFullNameByUserIds(knowledge.getDownloadUserId().split(","));
  237. knowledgeVo.setDownloadUserName(fullNameList.stream().collect(Collectors.joining(",")));
  238. }
  239. if (StringUtils.isNotEmpty(knowledge.getDownloadDeptId())){
  240. List<String> fullNameList = knowledgeMapper.selectFullNameByDeptIds(knowledge.getDownloadDeptId().split(","));
  241. knowledgeVo.setDownloadDeptName(fullNameList.stream().collect(Collectors.joining(",")));
  242. }
  243. } else {
  244. knowledgeVo.setIsAllowDownload(0);
  245. }
  246. if (knowledge.getIsDraft() == 0){
  247. return knowledgeVo;
  248. }
  249. }
  250. List<KnowledgeApprove> approvalVoList = knowledgeApproveMapper.selectByKnowledgerId(pkId);
  251. List<KnowledgeApprovalVo> approvals = new ArrayList<>();
  252. // 审核节点
  253. if (ObjectUtils.isNotEmpty(approvalVoList)) {
  254. KnowledgeApprove approve = null;
  255. KnowledgeApprovalVo approvalVo = null;
  256. boolean isFirstNoneApprove = true;
  257. for (int index = 0; index < approvalVoList.size(); index++) {
  258. approve = approvalVoList.get(index);
  259. approvalVo = new KnowledgeApprovalVo();
  260. approvalVo.setPkId(approve.getPkId());
  261. approvalVo.setName(approve.getName());
  262. //待审核记录且有两个领导
  263. String[] split = approve.getApproverId().split(",");
  264. if (approve.getResult() == null && split.length > 1){
  265. String approverIdTager = knowledgeAgentService.hasLeaderMore(split);
  266. approvalVo.setApproverId(approverIdTager);
  267. }
  268. //待审核记录且有代理人
  269. if (approve.getResult() == null && knowledgeAgentService.hasTager(approve)){
  270. approvalVo.setApproverId(approve.getTagerNo());
  271. } else {
  272. approvalVo.setApproverId(approve.getApproverId());
  273. }
  274. approvalVo.setActualApprover(approve.getActualApprover());
  275. approvalVo.setApprovalTime(approve.getApprovalTime());
  276. approvalVo.setSort(approve.getSort());
  277. approvalVo.setRemark(approve.getRemark());
  278. // 审核状态 :提交审核 审核通过 审核驳回
  279. if (approve.getResult() == null && isFirstNoneApprove) {
  280. if (knowledge.getApprovalStatus() == 2 || knowledge.getApprovalStatus() == 4) {
  281. isFirstNoneApprove = false;
  282. approvalVo.setApprovalStatus("");
  283. } else {
  284. isFirstNoneApprove = false;
  285. approvalVo.setApprovalStatus("提交审核");
  286. }
  287. } else {
  288. if (approve.getResult() == null) {
  289. approvalVo.setApprovalStatus("");
  290. } else if (approve.getResult() == 0) {
  291. approvalVo.setApprovalStatus("审核驳回");
  292. } else if (approve.getResult() == 1) {
  293. approvalVo.setApprovalStatus("审核通过");
  294. }
  295. }
  296. //审核人名称赋值(有实际审核人赋值实际审核人,没有赋值待审核人)
  297. if (approve.getResult() == null){
  298. String[] splitFinal = approve.getApproverId().split(",");
  299. if (splitFinal.length > 1){
  300. String approverNameTager = Arrays.asList(splitFinal).stream().map(h -> userService.queryByUsername(h).getFullName()).collect(Collectors.joining(","));
  301. approvalVo.setApproverAndActualName(approverNameTager);
  302. } else {
  303. if (knowledgeAgentService.hasTager(approve)){
  304. approvalVo.setApproverAndActualName(userService.queryByUsername(approvalVo.getApproverId()).getFullName());
  305. } else {
  306. approvalVo.setApproverAndActualName(approve.getApproverName());
  307. }
  308. }
  309. } else {
  310. approvalVo.setApproverAndActualName(approve.getActualApproverName());
  311. }
  312. approvals.add(approvalVo);
  313. }
  314. }
  315. knowledgeVo.setApprovals(approvals);
  316. //权限处理(组织架构)(详情需要增加点击量)
  317. if (flag != null && flag == 1 && knowledgeVo.getApprovalStatus() == 5 && !knowledge.getCreateBy().equals(userService.queryLoginUser())) {
  318. knowledgeVo = parseOrganization(knowledge.getOrganizationId(), true, knowledgeVo);
  319. }
  320. if (knowledgeVo.getIsOrganizationId() != null && knowledgeVo.getIsOrganizationId() == 1){
  321. return null;
  322. }
  323. return knowledgeVo;
  324. }
  325. /**
  326. * 查看全部知识
  327. *
  328. * @param filter
  329. * @return
  330. */
  331. public IPage findAllKnowledge(QueryFilter filter) {
  332. Map<String, Object> params = PageHelper.constructParams(filter);
  333. IPage page = knowledgeMapper.findAllKnowledge(filter.getPage(), filter.getParams(), params);
  334. List<KnowledgeVo> knowledgeVoList = page.getRecords();
  335. knowledgeVoList.forEach(e -> {
  336. if (!StringUtils.isEmpty(e.getCategoryId())) {
  337. KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = knowledgeCategoryService.findAllParentByCategoryId(e.getCategoryId());
  338. e.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVo);
  339. }
  340. e.setOperatorName(userService.queryUser(e.getUpdateBy()).getFullName());
  341. Map<String, Object> map = userService.querySexAndPhoto(e.getCreateBy());
  342. e.setParams(map);
  343. // 权限处理(组织架构)(列表不需要增加点击量)
  344. if (e.getApprovalStatus() == 5) {
  345. e = parseOrganization(e.getOrganizationId(), false, e);
  346. }
  347. //登陆人是作者,有权限
  348. if (e.getCreateBy().equals(userService.queryLoginUser())){
  349. e.setIsOrganizationId(0);
  350. }
  351. //如果知识还没有人进行审核,支持撤回(第一个节点审核结果为空,可撤回)(草稿无法撤回)
  352. if (!filter.getParams().containsKey("isDraft")){
  353. String knowledgeId = e.getPkId();
  354. List<KnowledgeApprove> knowledgeApproveList = knowledgeApproveMapper.selectList(new QueryWrapper<KnowledgeApprove>().eq("KNOWLEDGER_ID", e.getPkId()));
  355. if(knowledgeApproveList.get(0).getResult() == null){
  356. e.setIsWithdraw(0);
  357. } else {
  358. e.setIsWithdraw(1);
  359. }
  360. } else {
  361. e.setIsWithdraw(1);
  362. }
  363. //指定了附件下载权限会判断
  364. if (StringUtils.isNotEmpty(e.getDownloadUserId()) || StringUtils.isNotEmpty(e.getDownloadDeptId())){
  365. //附件下载权限
  366. e.setIsAllowDownload(isAllowDownload(e.getDownloadUserId(),e.getDownloadDeptId()));
  367. //附件可下载人员或部门字符串复制
  368. if (StringUtils.isNotEmpty(e.getDownloadUserId())){
  369. List<String> fullNameList = knowledgeMapper.selectFullNameByUserIds(e.getDownloadUserId().split(","));
  370. e.setDownloadUserName(fullNameList.stream().collect(Collectors.joining(",")));
  371. }
  372. if (StringUtils.isNotEmpty(e.getDownloadDeptId())){
  373. List<String> fullNameList = knowledgeMapper.selectFullNameByDeptIds(e.getDownloadDeptId().split(","));
  374. e.setDownloadDeptName(fullNameList.stream().collect(Collectors.joining(",")));
  375. }
  376. }
  377. });
  378. return page;
  379. }
  380. /**
  381. * 删除知识(若关联banner,则无法删除)
  382. *
  383. * @param knowledgeId
  384. * @return
  385. */
  386. @Transactional(rollbackFor = Exception.class)
  387. public Boolean deleteKnowledge(String knowledgeId) {
  388. Integer count = 0;
  389. // 查看是否关联着banner
  390. count = bannerMapper.selectCount(new QueryWrapper<Banner>().eq("KNOWLEDGE_ID", knowledgeId));
  391. //查看是否关联着地图
  392. count = mapContentMapper.selectCount(new QueryWrapper<MapContent>().eq("KNOWLEDGE_ID", knowledgeId));
  393. //查看是否关联着专辑
  394. count = albumCatalogueKnowledgeMapper.selectCount(new QueryWrapper<AlbumCatalogueKnowledge>().eq("KNOWLEDGE_ID", knowledgeId));
  395. if (count > 0) {
  396. return false;
  397. }
  398. // 把知识审批表中对应数据删除掉
  399. knowledgeApproveMapper.deleteByKnowledgeId(knowledgeId);
  400. // 调用搜索平台删除接口(删除文件)
  401. String documentId = knowledgeMapper.selectById(knowledgeId).getDocumentId();
  402. if (StringUtils.isNotEmpty(documentId)) {
  403. searchService.remove(documentId);
  404. }
  405. knowledgeMapper.deleteKnowledge(knowledgeId);
  406. return true;
  407. }
  408. /**
  409. * 修改知识,如当前知识在审核状态,无法修改
  410. *
  411. * @param entity
  412. * @return
  413. */
  414. @Transactional(rollbackFor = Exception.class)
  415. @Override
  416. public int update(Knowledge entity) {
  417. if (Objects.isNull(knowledgeCategoryMapper.selectById(entity.getCategoryId())) && entity.getIsDraft() == 1){
  418. throw new RuntimeException("输入的分类不存在,请重新输入");
  419. }
  420. Knowledge knowledge = this.get(entity.getPkId());
  421. //处理组织架构
  422. if (!ObjectUtil.valueAllNull(entity.getOrganizationIds())){
  423. String organizationId = JSON.toJSON(entity.getOrganizationIds()).toString();
  424. entity.setOrganizationId(organizationId);
  425. }
  426. // 知识为待节点审核状态和待最终审核状态,修改失败;知识为最终审核通过,修改失败
  427. if (knowledge.getApprovalStatus() == 3 || knowledge.getApprovalStatus() == 1) {
  428. return -1;
  429. } else {
  430. //是草稿,直接修改数据结束
  431. if (entity.getIsDraft() != null && entity.getIsDraft() == 0){
  432. entity.setApprovalStatus(6);
  433. IUser users = ContextUtil.getCurrentUser();
  434. entity.setUpdateBy(users.getUserId());
  435. entity.setUpdateTime(new Date());
  436. return this.getRepository().updateById(entity);
  437. }
  438. //知识被驳回了,重新修改进行审核(批次加1)
  439. entity.setApprovalStatus(1);
  440. entity.setViews(0);
  441. entity.setApprovalBatch(knowledge.getApprovalBatch() + 1);
  442. entity.setCreateBy(knowledge.getCreateBy());
  443. entity.setAuthor(knowledge.getAuthor());
  444. //删除原有的审批节点
  445. knowledgeApproveMapper.deleteByKnowledgeId(entity.getPkId());
  446. //重新拉取审核节点
  447. List<KnowledgeApprovalNodeVo> approvalVoList = getKnowledgeApprovalNode(entity.getCategoryId(),knowledge.getCreateBy());
  448. if (ObjectUtils.isNotEmpty(approvalVoList)) {
  449. KnowledgeApprovalNodeVo node;
  450. for (int index = 0; index < approvalVoList.size(); index++) {
  451. node = approvalVoList.get(index);
  452. if (node != null) {
  453. KnowledgeApprove knowledgeApprove = new KnowledgeApprove();
  454. knowledgeApprove.setPkId(IdGenerator.getIdStr());
  455. knowledgeApprove.setName(node.getName());
  456. knowledgeApprove.setKnowledgerId(knowledge.getPkId());
  457. knowledgeApprove.setApproverId(node.getApproverId());
  458. knowledgeApprove.setApproverName(node.getApproverName());
  459. knowledgeApprove.setApprovalBatch(1);
  460. knowledgeApprove.setSort(index + 1);
  461. knowledgeApprove.setIsFinal(node.getIsFinal());
  462. knowledgeApprove.setCreateBy(userService.queryLoginUser());
  463. knowledgeApprove.setCreateTime(new Date());
  464. knowledgeApproveMapper.insert(knowledgeApprove);
  465. }
  466. }
  467. }
  468. // 组织架构/职系/职等信息
  469. if (ObjectUtil.valueAllNull(entity.getOrganizationIds())){
  470. entity.setOrganizationId("");
  471. }
  472. return this.getRepository().updateById(entity);
  473. }
  474. }
  475. /**
  476. * 查找待审核的知识(分页查询,超过99条只显示前99条记录)
  477. *
  478. * @param filter
  479. * @return
  480. */
  481. public IPage findAllAuditKnowledge(QueryFilter filter) {
  482. Map<String, Object> params = PageHelper.constructParams(filter);
  483. List<KnowledgeVo> knowledgeVoList = knowledgeMapper.findAllAuditKnowledge(filter.getParams(), params);
  484. // 根据知识Id进行数据分组
  485. Map<String, List<KnowledgeVo>> result =
  486. knowledgeVoList.stream().collect(Collectors.groupingBy(KnowledgeVo::getKnowledgerId));
  487. // 结果集
  488. List<KnowledgeVo> knowledgeVoArrayList = new ArrayList<>();
  489. // 遍历每组的数据
  490. Set<Map.Entry<String, List<KnowledgeVo>>> entries = result.entrySet();
  491. for (Map.Entry<String, List<KnowledgeVo>> entry : entries) {
  492. List<KnowledgeVo> value = entry.getValue();
  493. for (int i = 0; i < value.size(); i++) {
  494. // 判断审批结果是否为null(如果审批结果没有null,证明审批已结束;如果等于0,证明审批没通过)
  495. if (value.get(i).getResult() == null) {
  496. value.get(i).setApprovalsFirst(knowledgeApproveMapper.selectById(value.get(i).getApproveId()));
  497. if (i != 0) {
  498. // 如果不是第一条数据,取前一条数据的审批时间
  499. Date approvalTime = value.get(i - 1).getApprovalTime();
  500. value.get(i).setApprovalTime(approvalTime);
  501. }
  502. // 把该记录加到结果集中
  503. knowledgeVoArrayList.add(value.get(i));
  504. break;
  505. }
  506. }
  507. }
  508. //结果集
  509. List<KnowledgeVo> resultList = new ArrayList<>();
  510. //按照时间排序
  511. List<KnowledgeVo> collect = knowledgeVoArrayList.stream().
  512. sorted((t1, t2) -> t2.getCreateTime().compareTo(t1.getCreateTime())).collect(Collectors.toList());
  513. // 权限判断
  514. // 判断当前登录人是否可以审核每一条知识
  515. String userNo = userService.queryLoginUsername();
  516. String userId = userService.queryLoginUser();
  517. //部门权限字符串
  518. List<String> deptAuthority = knowledgeApproveMapper.deptAuthority(userId);
  519. collect.forEach(e -> {
  520. String[] split = e.getApproverId().split(",");
  521. //处理默认节点有两个领导的情况(默认节点默认在第一位,sort=1)
  522. if (split.length > 1){
  523. String approverIdTager = knowledgeAgentService.hasLeaderMore(split);
  524. e.setApproverId(approverIdTager);
  525. }
  526. //判断是否有代理人
  527. if (hasTager(e)){
  528. e.setApproverId(e.getTagerNo());
  529. }
  530. boolean flag = false;
  531. for (int i = 0; i < deptAuthority.size(); i++) {
  532. if (deptAuthority.get(i).contains(e.getApproverId())) {
  533. flag = true;
  534. break;
  535. }
  536. }
  537. List<String> approverIdList = Arrays.asList(e.getApproverId().split(","));
  538. // 如果有权限
  539. if (approverIdList.contains(userNo) || flag) {
  540. resultList.add(e);
  541. }
  542. });
  543. Page pages = PageListUtils.getPages(filter.getPage().getCurrent(), filter.getPage().getSize(), resultList);
  544. List<KnowledgeVo> records = pages.getRecords();
  545. records.forEach(e -> {
  546. //赋值
  547. String categoryId = e.getCategoryId();
  548. KnowledgeCategoryAdminVo knowledgeCategoryAdminVo = knowledgeCategoryService.findAllParentByCategoryId(categoryId);
  549. e.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVo);
  550. if (StringUtils.isNotEmpty(e.getOrganizationId())){
  551. OrganizationDto organizationDto = JSON.parseObject(e.getOrganizationId(), OrganizationDto.class);
  552. e.setOrganizationIds(organizationDto);
  553. }
  554. //处理默认节点有两个领导的情况(默认节点默认在第一位,sort=1)
  555. String[] split = e.getApproverId().split(",");
  556. if (split.length > 1){
  557. String approverNameTager = Arrays.stream(split).map(h -> userService.queryByUsername(h).getFullName()).collect(Collectors.joining(","));
  558. e.setApproverName(approverNameTager);
  559. }
  560. // 判断是否有代理人,有,approverName赋值代理人
  561. if (hasTager(e)){
  562. e.setApproverName(userService.queryByUsername(e.getTagerNo()).getFullName());
  563. }
  564. });
  565. return pages;
  566. }
  567. //判断是否有代理人
  568. private boolean hasTager(KnowledgeVo knowledgeApprovalListVo){
  569. if (StringUtils.isNotEmpty(knowledgeApprovalListVo.getTagerNo())){
  570. Calendar date = Calendar.getInstance();
  571. date.setTime(new Date());
  572. Calendar begin = Calendar.getInstance();
  573. begin.setTime(knowledgeApprovalListVo.getStartTime());
  574. Calendar end = Calendar.getInstance();
  575. end.setTime(knowledgeApprovalListVo.getEndTime());
  576. return date.after(begin) && date.before(end);
  577. } else {
  578. return false;
  579. }
  580. }
  581. /**
  582. * 根据分类id查询工作成果列表和经验案例列表
  583. *
  584. * @param filter
  585. * @return
  586. */
  587. public IPage getAllKnowledgeByCategoryId(QueryFilter filter) {
  588. IPage page = new Page();
  589. Map<String, Object> params = PageHelper.constructParams(filter);
  590. Map<String, Object> map = new HashMap<>();
  591. // 工作成果下的知识
  592. String keyword = (String) filter.getParams().get("keyword");
  593. if (keyword.equals("working")) {
  594. map.put("categoryId", "40");
  595. filter.setParams(map);
  596. page = knowledgeMapper.getAllKnowledgeByCategoryId(filter.getPage(), filter.getParams(), params);
  597. List<KnowledgeVo> collect = page.getRecords();
  598. collect.forEach(g -> {
  599. KnowledgeCategoryAdminVo knowledgeCategoryAdminVos = knowledgeCategoryService.findAllParentByCategoryId(g.getCategoryId());
  600. g.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVos);
  601. Map<String, Object> maps = userService.querySexAndPhoto(g.getCreateBy());
  602. g.setParams(maps);
  603. //权限处理(组织架构)(工作成功列表不需要增加点击量)
  604. g = parseOrganization(g.getOrganizationId(),false,g);
  605. });
  606. } else {
  607. map.put("categoryId", "50");
  608. filter.setParams(map);
  609. page = knowledgeMapper.getAllKnowledgeByCategoryId(filter.getPage(), filter.getParams(), params);
  610. List<KnowledgeVo> collect = page.getRecords();
  611. collect.forEach(g -> {
  612. KnowledgeCategoryAdminVo knowledgeCategoryAdminVos = knowledgeCategoryService.findAllParentByCategoryId(g.getCategoryId());
  613. g.setKnowledgeCategoryAdminVo(knowledgeCategoryAdminVos);
  614. Map<String, Object> maps = userService.querySexAndPhoto(g.getCreateBy());
  615. g.setParams(maps);
  616. //权限处理(组织架构)(工作成功列表不需要增加点击量)
  617. g = parseOrganization(g.getOrganizationId(),false,g);
  618. });
  619. }
  620. return page;
  621. }
  622. /**
  623. * 获取当前人未审核知识的数量
  624. *
  625. * @return
  626. */
  627. public Long getAuditKnowledgeSum() {
  628. //构建查询条件
  629. QueryFilter queryFilter = new QueryFilter();
  630. IPage page = this.findAllAuditKnowledge(queryFilter);
  631. long total = page.getTotal();
  632. return total;
  633. }
  634. /**
  635. * 前台获取登录人上传文件数量
  636. *
  637. * @return
  638. */
  639. public Integer getKnowledgeSum() {
  640. LambdaQueryWrapper<Knowledge> wrapper = new LambdaQueryWrapper<>();
  641. String loginUser = userService.queryLoginUser();
  642. wrapper.eq(Knowledge::getApprovalStatus, 5).eq(Knowledge::getCreateBy, loginUser);
  643. return knowledgeMapper.selectCount(wrapper);
  644. }
  645. /**
  646. * 向统计表中增加数据(相同数据不增加)
  647. *
  648. * @param userId 用户Id
  649. * @param knowledgeId 知识Id
  650. */
  651. private void addCountViews(String userId, String knowledgeId) {
  652. QueryWrapper<ActionLog> queryWrapper = new QueryWrapper<>();
  653. queryWrapper.eq("USER_ID", userId);
  654. queryWrapper.eq("KNOWLEDGE_ID", knowledgeId);
  655. queryWrapper.eq("TYPE", 1);
  656. List<ActionLog> actionLogList = actionLogMapper.selectList(queryWrapper);
  657. if (CollectionUtils.isEmpty(actionLogList)) {
  658. ActionLog actionLog = new ActionLog();
  659. actionLog.setType(1);
  660. actionLog.setKnowledgeId(knowledgeId);
  661. actionLog.setUserId(userId);
  662. actionLogMapper.insert(actionLog);
  663. }
  664. }
  665. /**
  666. * 组织架构解析
  667. * @param organizationId 组织架构信息
  668. * @param isView 是否需要增加点击量(true 是 false 否)
  669. * @param KnowledgeVo 知识信息
  670. */
  671. private KnowledgeVo parseOrganization(String organizationId, Boolean isView, KnowledgeVo knowledgeVo) {
  672. OsUserDto osUserDto = userService.queryOsUserDto(userService.queryLoginUser());
  673. //没有组织架构信息
  674. if (StringUtils.isEmpty(organizationId)) {
  675. if (isView) {
  676. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  677. }
  678. knowledgeVo.setIsOrganizationId(0);
  679. return knowledgeVo;
  680. }
  681. // 解析组织架构/职系/职等数据
  682. OrganizationDto organizationDto = JSON.parseObject(organizationId, OrganizationDto.class);
  683. log.info("解析出组织架构信息 -> {}",organizationDto);
  684. knowledgeVo.setOrganizationIds(organizationDto);
  685. // 获取当前登录人的组织架构/职系/职等数据
  686. String sequenceCode = osUserDto.getSequenceCode();
  687. String slyGrade = osUserDto.getSlyGrade();
  688. List<String> deptAuthority = knowledgeApproveMapper.deptAuthority(userService.queryLoginUser());
  689. AtomicBoolean flags = new AtomicBoolean(false);
  690. if (!CollectionUtils.isEmpty(organizationDto.getOrganizationId())) {
  691. organizationDto.getOrganizationId().forEach(e -> {
  692. for (int i = 0; i < deptAuthority.size(); i++) {
  693. if (deptAuthority.get(i).contains(e)) {
  694. flags.set(true);
  695. break;
  696. }
  697. }
  698. });
  699. }
  700. // 如果知识最终审核通过,判断组织架构/职系/职等是否符合(前台判断)
  701. // 如果职系,职等为空,组织架构id不为空
  702. if (!CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  703. CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  704. // 比较当前用户的组织架构是否符合条件
  705. if (flags.get()) {
  706. // 符合条件,增加点击量
  707. if (isView) {
  708. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  709. }
  710. knowledgeVo.setIsOrganizationId(0);
  711. } else {
  712. // 没有权限(不增加点击量)
  713. knowledgeVo.setIsOrganizationId(1);
  714. }
  715. }
  716. // 如果组织架构id,职等为空,职系不为空
  717. if (CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && !CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  718. CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  719. // 比较当前用户的职系是否符合条件
  720. boolean flag = false;
  721. for (String s : organizationDto.getGradeId()) {
  722. if (s.contains(sequenceCode)) {
  723. flag = true;
  724. break;
  725. }
  726. }
  727. if (flag) {
  728. // 符合条件,增加点击量
  729. if (isView) {
  730. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  731. }
  732. knowledgeVo.setIsOrganizationId(0);
  733. } else {
  734. // 没有权限(不增加点击量)
  735. knowledgeVo.setIsOrganizationId(1);
  736. }
  737. }
  738. // 如果组织架构id,职系为空,职等不为空
  739. if (CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  740. !CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  741. // 比较当前用户的职等是否符合条件
  742. if (organizationDto.getGradeLevelId().contains(slyGrade)) {
  743. // 符合条件,增加点击量
  744. if (isView) {
  745. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  746. }
  747. knowledgeVo.setIsOrganizationId(0);
  748. } else {
  749. // 没有权限(不增加点击量)
  750. knowledgeVo.setIsOrganizationId(1);
  751. }
  752. }
  753. // 如果职等为空,组织架构id,职系不为空
  754. if (!CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && !CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  755. CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  756. boolean flag = false;
  757. for (String s : organizationDto.getGradeId()) {
  758. if (s.contains(sequenceCode)) {
  759. flag = true;
  760. break;
  761. }
  762. }
  763. if (flags.get() && flag) {
  764. // 符合条件,增加点击量
  765. if (isView) {
  766. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  767. }
  768. knowledgeVo.setIsOrganizationId(0);
  769. } else {
  770. // 没有权限(不增加点击量)
  771. knowledgeVo.setIsOrganizationId(1);
  772. }
  773. }
  774. // 如果职系为空,组织架构id,职等不为空
  775. if (!CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  776. !CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  777. if (flags.get() && organizationDto.getGradeLevelId().contains(slyGrade)) {
  778. // 符合条件,增加点击量
  779. if (isView) {
  780. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  781. }
  782. knowledgeVo.setIsOrganizationId(0);
  783. } else {
  784. // 没有权限(不增加点击量)
  785. knowledgeVo.setIsOrganizationId(1);
  786. }
  787. }
  788. // 如果组织架构id为空,职系,职等不为空
  789. if (CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && !CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  790. !CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  791. boolean flag = false;
  792. for (String s : organizationDto.getGradeId()) {
  793. if (s.contains(sequenceCode)) {
  794. flag = true;
  795. break;
  796. }
  797. }
  798. if (flag && organizationDto.getGradeLevelId().contains(slyGrade)) {
  799. // 符合条件,增加点击量
  800. if (isView) {
  801. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  802. }
  803. knowledgeVo.setIsOrganizationId(0);
  804. } else {
  805. // 没有权限(不增加点击量)
  806. knowledgeVo.setIsOrganizationId(1);
  807. }
  808. }
  809. // 如果组织架构id,职系,职等都不为空
  810. if (!CollectionUtils.isEmpty(organizationDto.getOrganizationId()) && !CollectionUtils.isEmpty(organizationDto.getGradeId()) &&
  811. !CollectionUtils.isEmpty(organizationDto.getGradeLevelId())) {
  812. boolean flag = false;
  813. for (String s : organizationDto.getGradeId()) {
  814. if (s.contains(sequenceCode)) {
  815. flag = true;
  816. break;
  817. }
  818. }
  819. if (flags.get() && flag && organizationDto.getGradeLevelId().contains(slyGrade)) {
  820. // 符合条件,增加点击量
  821. if (isView) {
  822. addCountViews(osUserDto.getUserId(), knowledgeVo.getPkId());
  823. }
  824. knowledgeVo.setIsOrganizationId(0);
  825. } else {
  826. // 没有权限(不增加点击量)
  827. knowledgeVo.setIsOrganizationId(1);
  828. }
  829. }
  830. return knowledgeVo;
  831. }
  832. /**
  833. * 转移作者
  834. * @param transferAuthorDto
  835. */
  836. @Transactional(rollbackFor = Exception.class)
  837. public void transferAuthor(TransferAuthorDto transferAuthorDto) {
  838. //被转移人
  839. List<String> authors = transferAuthorDto.getAuthors();
  840. //准备转移的人
  841. String arriveAuthor = transferAuthorDto.getArriveAuthor();
  842. String arriveAuthorName = userService.queryOsUserDto(arriveAuthor).getFullName();
  843. //转移
  844. knowledgeMapper.transferAuthor(authors,arriveAuthor,arriveAuthorName);
  845. }
  846. /**
  847. * 被转移人树
  848. * @param filter
  849. * @param params
  850. * @return
  851. */
  852. public IPage<OsUser> getAllUsersByGroupId(QueryFilter filter, Map params) {
  853. String groupId = (String)params.get("groupId");
  854. if (StringUtils.isNotEmpty(groupId)) {
  855. if ("curOrg".equals(groupId)) {
  856. IUser user = ContextUtil.getCurrentUser();
  857. if (user != null) {
  858. groupId = user.getDeptId();
  859. }
  860. }
  861. String[] groupIds = groupId.split(",");
  862. params.put("groupIds", Arrays.asList(groupIds));
  863. }
  864. IPage<OsUser> osUserIPage = knowledgeMapper.getAllUsersByGroupId(filter.getPage(), params);
  865. String tenantId = ContextUtil.getCurrentTenantId();
  866. List<OsUser> osList = new ArrayList();
  867. List<OsUser> osUsers = osUserIPage.getRecords();
  868. OsUser user;
  869. for(Iterator var8 = osUsers.iterator(); var8.hasNext(); osList.add(user)) {
  870. user = (OsUser)var8.next();
  871. OsGroup deps = this.getMainDeps(user.getUserId(), tenantId);
  872. if (deps != null) {
  873. user.setDeptName(deps.getName());
  874. user.setMainDepId(deps.getGroupId());
  875. }
  876. }
  877. osUserIPage.setRecords(osList);
  878. return osUserIPage;
  879. }
  880. public OsGroup getMainDeps(String userId, String tenantId) {
  881. List<OsGroup> groups = knowledgeMapper.getByDimIdUserIdRelTypeIdIsMain("1", userId, "1", MBoolean.YES.name(), tenantId);
  882. return groups.size() > 0 ? (OsGroup)groups.get(0) : null;
  883. }
  884. //@Transactional(rollbackFor = Exception.class)
  885. public List<String> importKnowledge() {
  886. //查询需要导入的数据(组织架构格式化)
  887. List<KnowledgeCp> knowledgeCpList = knowledgeCpMapper.selectList(null);
  888. knowledgeCpList.parallelStream().forEach(e -> {
  889. if (StringUtils.isNotEmpty(e.getOrganizationId())){
  890. String s = e.getOrganizationId().replaceAll("\\\\", "");
  891. e.setOrganizationId(s);
  892. }
  893. });
  894. List<String> pkIdList = new ArrayList<>();
  895. //取出第一条数据
  896. knowledgeCpList.stream().limit(100).forEach(e -> {
  897. String pkId = null;
  898. try {
  899. pkId = this.create(null,e);
  900. } catch (Exception ex){
  901. pkIdList.add(e.getPkId());
  902. }
  903. //导入成功,删除原数据
  904. if (StringUtils.isNotEmpty(pkId) && e.getPkId().equals(pkId)){
  905. knowledgeCpMapper.deleteCp(pkId);
  906. }
  907. });
  908. return pkIdList;
  909. }
  910. /**
  911. * 批量修改分类
  912. * @param transferKnowledgeCategoryDto
  913. */
  914. public void transferCategory(TransferKnowledgeCategoryDto transferKnowledgeCategoryDto) {
  915. //需要转移的知识
  916. List<String> knowledgeIds = transferKnowledgeCategoryDto.getKnowledgeIds();
  917. //准备转移到的分类
  918. String categoryId = transferKnowledgeCategoryDto.getCategoryId();
  919. //判断知识分类id是否存在
  920. KnowledgeCategory knowledgeCategory = knowledgeCategoryMapper.selectById(categoryId);
  921. if (Objects.isNull(knowledgeCategory)){
  922. throw new RuntimeException("输入的知识分类id不存在");
  923. }
  924. //转移
  925. knowledgeMapper.transferCategory(knowledgeIds,categoryId);
  926. }
  927. /**
  928. * 知识撤回
  929. * @param knowledgeId
  930. */
  931. public void knowledgeWithdraw(String knowledgeId) {
  932. //判断知识是否被审核过了
  933. List<KnowledgeApprove> knowledgeApproveList = knowledgeApproveMapper.
  934. selectList(new QueryWrapper<KnowledgeApprove>().eq("KNOWLEDGER_ID", knowledgeId));
  935. if (knowledgeApproveList.stream().findFirst().get().getResult() != null){
  936. throw new RuntimeException("知识被审核过了,无法撤回");
  937. }
  938. //撤回(知识审核状态修改为6且进入草稿,审核记录删除)
  939. Knowledge knowledge = this.get(knowledgeId);
  940. knowledge.setPkId(knowledgeId);
  941. knowledge.setApprovalStatus(6);
  942. knowledge.setIsDraft(0);
  943. knowledgeMapper.updateById(knowledge);
  944. knowledgeApproveMapper.deleteByKnowledgeId(knowledgeId);
  945. }
  946. /**
  947. * 判断是否有下载附件权限(有权限 返回0; 没权限 返回1)
  948. * @return
  949. */
  950. private Integer isAllowDownload(String downloadUserId,String downloadDeptId){
  951. String userId = userService.queryLoginUser();
  952. String deptId = userService.queryLoginUserDeptId();
  953. //二者都不为空
  954. if (StringUtils.isNotEmpty(downloadDeptId) && StringUtils.isNotEmpty(downloadUserId)){
  955. //可下载部门数组
  956. List<String> deptAuthority = knowledgeApproveMapper.findAllDeptIdByParent(deptId);
  957. String[] downloadDeptIdStr = downloadDeptId.split(",");
  958. boolean flag = false;
  959. for (int i = 0; i < downloadDeptIdStr.length; i++) {
  960. if (deptAuthority.contains(downloadDeptIdStr[i])) {
  961. flag = true;
  962. break;
  963. }
  964. }
  965. List<String> approverIdList = Arrays.asList(downloadUserId.split(","));
  966. // 如果有权限
  967. if (!approverIdList.contains(userId) && !flag) {
  968. // 不是该部门的人,不能查看
  969. return 1;
  970. } else {
  971. return 0;
  972. }
  973. } else {
  974. //可下载部门情况
  975. if (StringUtils.isNotEmpty(downloadDeptId)){
  976. //可下载部门数组
  977. String[] downloadDeptIdStr = downloadDeptId.split(",");
  978. for (String downloadDeptIds : downloadDeptIdStr) {
  979. List<String> deptAuthority = knowledgeApproveMapper.findAllDeptIdByParent(downloadDeptIds);
  980. if (deptAuthority.contains(deptId)){
  981. return 0;
  982. }
  983. }
  984. }
  985. //可下载人员情况
  986. if (StringUtils.isNotEmpty(downloadUserId)){
  987. List<String> approverIdList = Arrays.asList(downloadUserId.split(","));
  988. if (approverIdList.contains(userId)){
  989. return 0;
  990. } else {
  991. return 1;
  992. }
  993. }
  994. }
  995. return 1;
  996. }
  997. }