ScratchWordsService.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. package cn.cslg.pas.service;
  2. import cn.cslg.pas.common.model.PersonnelVO;
  3. import cn.cslg.pas.common.model.dto.*;
  4. import cn.cslg.pas.common.model.vo.PageVO;
  5. import cn.cslg.pas.common.model.vo.ProjectVO;
  6. import cn.cslg.pas.common.model.vo.ScratchWordVO;
  7. import cn.cslg.pas.common.model.vo.ScratchWordsVO;
  8. import cn.cslg.pas.common.utils.CacheUtils;
  9. import cn.cslg.pas.common.utils.SecurityUtils.LoginUtils;
  10. import cn.cslg.pas.domain.*;
  11. import cn.cslg.pas.exception.XiaoShiException;
  12. import cn.cslg.pas.mapper.ProjectMapper;
  13. import cn.cslg.pas.mapper.ScratchWordsMapper;
  14. import com.alibaba.fastjson.JSON;
  15. import com.alibaba.fastjson2.JSONObject;
  16. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  17. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  18. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  19. import com.github.pagehelper.IPage;
  20. import com.github.pagehelper.PageHelper;
  21. import com.github.pagehelper.PageInfo;
  22. import lombok.RequiredArgsConstructor;
  23. import lombok.extern.slf4j.Slf4j;
  24. import org.springframework.beans.BeanUtils;
  25. import org.springframework.context.annotation.Lazy;
  26. import org.springframework.stereotype.Service;
  27. import java.io.IOException;
  28. import java.util.ArrayList;
  29. import java.util.Date;
  30. import java.util.List;
  31. import java.util.stream.Collectors;
  32. /**
  33. * <p>
  34. * 划词高亮表 服务类
  35. * </p>
  36. *
  37. * @author 李仁杰
  38. * @since 2023-06-13
  39. */
  40. @Slf4j
  41. @Service
  42. @RequiredArgsConstructor(onConstructor_ = {@Lazy})
  43. public class ScratchWordsService extends ServiceImpl<ScratchWordsMapper, ScratchWords> {
  44. private final ScratchWordsMapper scratchWordsMapper;
  45. private final CacheUtils cacheUtils;
  46. private final LoginUtils loginUtils;
  47. private final ProjectService projectService;
  48. private final ProjectMapper projectMapper;
  49. private final OutInterfaceService outInterfaceService;
  50. private final PatentService patentService;
  51. /**
  52. * 新增划词高亮
  53. *
  54. * @param scratchWordsDTO
  55. */
  56. public void add(ScratchWordsDTO scratchWordsDTO) {
  57. //判断传入列表不为空
  58. if (scratchWordsDTO != null) {
  59. if (scratchWordsDTO.getCreateFrom() == null) {
  60. scratchWordsDTO.setCreateFrom(0);
  61. }
  62. ScratchWords scratchWords = new ScratchWords();
  63. BeanUtils.copyProperties(scratchWordsDTO, scratchWords);
  64. //获取当前登陆人信息
  65. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  66. //设置创建人id
  67. scratchWords.setCreateId(personnelVO.getId());
  68. //设置租户id
  69. scratchWords.setTenantId(personnelVO.getTenantId());
  70. //数据入表
  71. scratchWords.insert();
  72. } else {
  73. throw new XiaoShiException("传入对象不能为空");
  74. }
  75. }
  76. /**
  77. * 更新划词高亮
  78. *
  79. * @param scratchWordsUpdateDTO
  80. */
  81. public void update(ScratchWordsUpdateDTO scratchWordsUpdateDTO) {
  82. //判断传入列表不为空
  83. if (scratchWordsUpdateDTO != null) {
  84. ScratchWords scratchWords = this.getById(scratchWordsUpdateDTO.getId());
  85. BeanUtils.copyProperties(scratchWordsUpdateDTO, scratchWords);
  86. scratchWords.updateById();
  87. } else {
  88. throw new XiaoShiException("传入对象不能为空");
  89. }
  90. }
  91. /**
  92. * 查询划词高亮
  93. *
  94. * @param swQueryDTO
  95. * @return
  96. */
  97. public List<ScratchWordsVO> queryAll(SWQueryDTO swQueryDTO) {
  98. if (swQueryDTO.getPatentNo() != null) {
  99. //获取当前登陆人信息
  100. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  101. Integer tenantId = personnelVO.getTenantId();
  102. Integer createId = personnelVO.getId();
  103. //创建来源(默认0/专题库1/报告2)
  104. if (swQueryDTO.getCreateFrom().equals(1)) {
  105. Integer projectId = swQueryDTO.getId();
  106. Integer reportId = -1;
  107. List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
  108. return scratchWords;
  109. }
  110. //创建来源(默认0/专题库1/报告2)
  111. else if (swQueryDTO.getCreateFrom().equals(2)) {
  112. Integer reportId = swQueryDTO.getId();
  113. Integer projectId = -1;
  114. List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
  115. return scratchWords;
  116. }
  117. //创建来源(默认0/专题库1/报告2)
  118. else if (swQueryDTO.getCreateFrom().equals(0)) {
  119. Integer reportId = -1;
  120. Integer projectId = -1;
  121. List<ScratchWordsVO> scratchWords = scratchWordsMapper.querySW(swQueryDTO.getPatentNo(), tenantId, createId, projectId, reportId);
  122. return scratchWords;
  123. } else {
  124. throw new XiaoShiException("暂无该情况");
  125. }
  126. } else {
  127. throw new XiaoShiException("传入参数不可为空");
  128. }
  129. }
  130. public PageVO queryScratchs(QueryScratchsDTO queryScratchsDTO) throws IOException {
  131. log.info("开始处理【查询标注清单】的业务,参数为:{}", queryScratchsDTO);
  132. PageVO pageVO = new PageVO()
  133. .setCurrent(queryScratchsDTO.getCurrent())
  134. .setSize(queryScratchsDTO.getSize());
  135. //若根据创建人名称模糊查询,调用权限系统根据人员名称获得人员ids并装载到参数中
  136. if (queryScratchsDTO.getName() != null && !queryScratchsDTO.getName().equals("")) {
  137. String res = outInterfaceService.getPersonIdByNamePCS(queryScratchsDTO.getName());
  138. List<Integer> personIds = JSON.parseArray(res, Integer.class);
  139. if (personIds.size() == 0) {
  140. personIds.add(-1);
  141. }
  142. queryScratchsDTO.setPersonIds(personIds);
  143. }
  144. //获取登陆人id、所属租户id、token
  145. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  146. Integer personId = personnelVO.getId();
  147. Integer tenantId = personnelVO.getTenantId();
  148. String token = "token=" + personnelVO.getToken();
  149. //获取当前登陆人有权查看的专题库projectIds
  150. ProjectVO params = new ProjectVO();
  151. if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) { //代码控制不同类型的角色查询权限
  152. params.setPersonnelId(personId);
  153. if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) {
  154. params.setTenantId(personnelVO.getTenantId());
  155. }
  156. }
  157. List<Project> projects = projectMapper.getProjects(params);
  158. List<Integer> projectIds = new ArrayList<>();
  159. if (projects == null || projects.size() == 0) {
  160. projectIds.add(-1);
  161. } else {
  162. projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
  163. }
  164. //获取当前登陆人有权查看的报告reportIds
  165. String res = outInterfaceService.getReportsFromRMS(token);
  166. JSONObject jsonObject = JSONObject.parseObject(res);
  167. List<Integer> reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class);
  168. //开始分页(分组)查询标注表标注清单
  169. if (queryScratchsDTO.getCurrent() != null && queryScratchsDTO.getSize() != null) {
  170. PageHelper.startPage(queryScratchsDTO.getCurrent(), queryScratchsDTO.getSize());
  171. }
  172. // if (queryScratchsDTO.getGrouping() == null || queryScratchsDTO.getGrouping().equals("")) { //不分组
  173. List<ScratchWordVO> scratchWords = scratchWordsMapper.queryScratchWords(queryScratchsDTO, tenantId, personId, projectIds, reportIds);
  174. PageInfo<ScratchWordVO> pageInfo = new PageInfo<>(scratchWords);
  175. if (scratchWords.size() > 0) {
  176. //装载创建人名称
  177. List<Integer> createPersonIds = scratchWords.stream().map(ScratchWordVO::getCreateId).collect(Collectors.toList());
  178. res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
  179. jsonObject = JSONObject.parseObject(res);
  180. List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
  181. scratchWords.forEach(scratchWord -> {
  182. personnels.forEach(personnel -> {
  183. if (personnel.getId().equals(scratchWord.getCreateId())) {
  184. scratchWord.setName(personnel.getPersonnelName());
  185. }
  186. });
  187. });
  188. //装载专利id和专利标题
  189. List<String> patentNos = scratchWords.stream().map(ScratchWordVO::getPatentNo).collect(Collectors.toList());
  190. List<Patent> patents = patentService.list(new LambdaQueryWrapper<Patent>().in(Patent::getPatentNo, patentNos).or().in(Patent::getPublicNo, patentNos));
  191. scratchWords.forEach(scratchWord -> {
  192. patents.forEach(patent -> {
  193. if (patent.getPatentNo().equals(scratchWord.getPatentNo()) || patent.getPublicNo().equals(scratchWord.getPatentNo())) {
  194. scratchWord.setPatentId(patent.getId());
  195. scratchWord.setPatentTitle(patent.getName());
  196. }
  197. });
  198. });
  199. }
  200. pageVO.setRecords(scratchWords)
  201. .setTotal((int) pageInfo.getTotal());
  202. // } else { //分组
  203. // List<GroupName> groupNames = scratchWordsMapper.queryGroupScratchs(queryScratchsDTO, tenantId, personId, projectIds, reportIds);
  204. // PageInfo<GroupName> pageInfo = new PageInfo<>(groupNames);
  205. // if (groupNames.size() > 0) {
  206. // //装载创建人名称
  207. // List<Integer> createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList());
  208. // res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
  209. // jsonObject = JSONObject.parseObject(res);
  210. // List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
  211. // groupNames.forEach(groupName -> {
  212. // personnels.forEach(personnel -> {
  213. // if (personnel.getId().equals(groupName.getCreateId())) {
  214. // groupName.setName(personnel.getPersonnelName());
  215. // }
  216. // });
  217. // });
  218. // }
  219. // pageVO.setRecords(groupNames)
  220. // .setTotal((int) pageInfo.getTotal());
  221. // }
  222. return pageVO;
  223. }
  224. public PageVO queryGroupScratchs(QueryGroupScratchsDTO queryGroupScratchsDTO) throws IOException {
  225. log.info("开始处理【分页分组查询标注清单】的业务,参数为:{}", queryGroupScratchsDTO);
  226. //调用权限系统根据人员名称获得人员ids
  227. if (queryGroupScratchsDTO.getName() != null && !queryGroupScratchsDTO.getName().equals("")) {
  228. String res = outInterfaceService.getPersonIdByNamePCS(queryGroupScratchsDTO.getName());
  229. //JSONObject jsonObject = JSONObject.parseObject(res);
  230. List<Integer> personIds = JSON.parseArray(res, Integer.class);
  231. if (personIds.size() == 0) {
  232. personIds.add(-1);
  233. }
  234. queryGroupScratchsDTO.setPersonIds(personIds);
  235. }
  236. //获取登陆人id和所属租户id
  237. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  238. Integer personId = personnelVO.getId();
  239. Integer tenantId = personnelVO.getTenantId();
  240. String token = "token=" + personnelVO.getToken();
  241. //查询本系统的专题库表"os_thematic",获取当前登陆人有权查看的专题库projectIds
  242. ProjectVO params = new ProjectVO();
  243. //代码控制不同类型的角色查询权限
  244. if (personnelVO.getRoleType() == null || personnelVO.getRoleType() != 1) {
  245. params.setPersonnelId(personId);
  246. if (personnelVO.getRoleType() != null && personnelVO.getRoleType() == 2) {
  247. params.setTenantId(personnelVO.getTenantId());
  248. }
  249. }
  250. List<Project> projects = projectMapper.getProjects(params);
  251. List<Integer> projectIds = projects.stream().map(Project::getId).collect(Collectors.toList());
  252. //查询报告系统,获取当前登陆人有权查看的报告reportIds
  253. String res = outInterfaceService.getReportsFromRMS(token);
  254. JSONObject jsonObject = JSONObject.parseObject(res);
  255. List<Integer> reportIds = JSON.parseArray(jsonObject.get("data").toString(), Integer.class);
  256. //开始查询标注表标注清单
  257. if (queryGroupScratchsDTO.getCurrent() != null && queryGroupScratchsDTO.getSize() != null) {
  258. PageHelper.startPage(queryGroupScratchsDTO.getCurrent(), queryGroupScratchsDTO.getSize());
  259. }
  260. List<GroupName> groupNames = scratchWordsMapper.queryGroupScratchs(queryGroupScratchsDTO, tenantId, personId, projectIds, reportIds);
  261. PageInfo<GroupName> pageInfo = new PageInfo<>(groupNames);
  262. if (groupNames.size() > 0) {
  263. //装载创建人名称
  264. List<Integer> createPersonIds = groupNames.stream().map(GroupName::getCreateId).collect(Collectors.toList());
  265. res = outInterfaceService.getPersonnelByIdsFromPCS(createPersonIds);
  266. jsonObject = JSONObject.parseObject(res);
  267. List<Personnel> personnels = JSON.parseArray(jsonObject.get("data").toString(), Personnel.class);
  268. groupNames.forEach(groupName -> {
  269. personnels.forEach(personnel -> {
  270. if (personnel.getId().equals(groupName.getCreateId())) {
  271. groupName.setName(personnel.getPersonnelName());
  272. }
  273. });
  274. });
  275. }
  276. PageVO pageVO = new PageVO()
  277. .setRecords(groupNames)
  278. .setCurrent(queryGroupScratchsDTO.getCurrent())
  279. .setSize(queryGroupScratchsDTO.getSize())
  280. .setTotal((int) pageInfo.getTotal());
  281. return pageVO;
  282. }
  283. /**
  284. * 删除划词高亮
  285. *
  286. * @param ids
  287. */
  288. public void delete(List<Integer> ids) {
  289. for (int i = 0; i < ids.size(); i++) {
  290. LambdaQueryWrapper<ScratchWords> LW = new LambdaQueryWrapper<>();
  291. LW.eq(ScratchWords::getId, ids.get(i));
  292. ScratchWords scratchWords = this.getOne(LW);
  293. scratchWords.deleteById();
  294. }
  295. }
  296. }