PatentDigProjectService.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.ClientDTO;
  3. import cn.cslg.pas.common.dto.business.PatentDigProjectDTO;
  4. import cn.cslg.pas.common.dto.business.PatentDigProjectUpdateDTO;
  5. import cn.cslg.pas.common.dto.business.ProjectEventDTO;
  6. import cn.cslg.pas.common.model.cronModel.*;
  7. import cn.cslg.pas.common.model.request.GroupRequest;
  8. import cn.cslg.pas.common.model.request.QueryRequest;
  9. import cn.cslg.pas.common.model.request.StringGroupRequest;
  10. import cn.cslg.pas.common.model.request.StringRequest;
  11. import cn.cslg.pas.common.utils.CacheUtils;
  12. import cn.cslg.pas.common.utils.LoginUtils;
  13. import cn.cslg.pas.common.vo.DepartmentVO;
  14. import cn.cslg.pas.common.vo.RdProjectVO;
  15. import cn.cslg.pas.common.vo.business.PatentDigProjectVO;
  16. import cn.cslg.pas.common.vo.business.PatentProjectVO;
  17. import cn.cslg.pas.common.vo.business.SimplePersonVO;
  18. import cn.cslg.pas.domain.business.*;
  19. import cn.cslg.pas.exception.UnLoginException;
  20. import cn.cslg.pas.exception.XiaoShiException;
  21. import cn.cslg.pas.factorys.businessFactory.Business;
  22. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
  23. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupImp;
  24. import cn.cslg.pas.mapper.PatentDigProjectMapper;
  25. import cn.cslg.pas.service.common.FileManagerService;
  26. import cn.cslg.pas.service.permissions.PermissionService;
  27. import cn.cslg.pas.service.query.FormatQueryService;
  28. import com.alibaba.fastjson.JSON;
  29. import com.alibaba.fastjson.JSONObject;
  30. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  31. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  32. import org.springframework.beans.BeanUtils;
  33. import org.springframework.beans.factory.annotation.Autowired;
  34. import org.springframework.stereotype.Service;
  35. import org.springframework.transaction.annotation.Transactional;
  36. import org.springframework.web.bind.annotation.RequestBody;
  37. import org.springframework.web.multipart.MultipartFile;
  38. import java.io.IOException;
  39. import java.util.ArrayList;
  40. import java.util.List;
  41. import java.util.stream.Collectors;
  42. @Service
  43. public class PatentDigProjectService extends ServiceImpl<PatentDigProjectMapper, PatentDigProject> implements Business {
  44. @Autowired
  45. private RdProjectService rdProjectService;
  46. @Autowired
  47. private AssoProjectFileService assoProjectFileService;
  48. @Autowired
  49. private ProjectService projectService;
  50. @Autowired
  51. private FormatQueryService formatQueryService;
  52. @Autowired
  53. private PatentDigProjectMapper patentDigProjectMapper;
  54. @Autowired
  55. private FileManagerService fileManagerService;
  56. @Autowired
  57. private PermissionService permissionService;
  58. @Autowired
  59. private CacheUtils cacheUtils;
  60. @Autowired
  61. private LoginUtils loginUtils;
  62. @Autowired
  63. private AssoProjectEventService assoProjectEventService;
  64. @Autowired
  65. private EventService eventService;
  66. @Autowired
  67. private AssoProjectPersonService assoProjectPersonService;
  68. @Autowired
  69. private MatterService matterService;
  70. @Autowired
  71. private ScenarioService scenarioService;
  72. @Autowired
  73. private QueryGroupFactory queryGroupFactory;
  74. @Autowired
  75. private SystemDictService systemDictService;
  76. @Override
  77. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  78. List<String> sqls = formatQueryService.reSqls(queryRequest, "patentDigProject");
  79. //根据sql查询专题库信息
  80. sqls = this.loadSearchSql(sqls);
  81. List<PatentDigProjectVO> patentProjectVOS = patentDigProjectMapper.getPatentDigProject(sqls.get(0), sqls.get(1), sqls.get(2));
  82. Long total = patentDigProjectMapper.getPatentDigCount(sqls.get(0));
  83. //装载专利数据库信息
  84. this.loadPatentDigProject(patentProjectVOS);
  85. Records records = new Records();
  86. records.setCurrent(queryRequest.getCurrent());
  87. records.setSize(queryRequest.getSize());
  88. records.setData(patentProjectVOS);
  89. records.setTotal(total);
  90. return records;
  91. }
  92. @Override
  93. public Object addMessage(Object object, List<MultipartFile> files) {
  94. return null;
  95. }
  96. @Override
  97. public Object deleteMessage(List<Integer> ids) throws IOException {
  98. if (ids == null || ids.size() == 0) {
  99. throw new XiaoShiException("ids不能为空");
  100. }
  101. //根据projectId 删除专利挖掘项目
  102. LambdaQueryWrapper<PatentDigProject> digProjectQueryWrapper = new LambdaQueryWrapper<>();
  103. digProjectQueryWrapper.in(PatentDigProject::getProjectId, ids);
  104. this.remove(digProjectQueryWrapper);
  105. //根据projectId 删除相关文件
  106. LambdaQueryWrapper<AssoProjectFile> deleteFileWrapper = new LambdaQueryWrapper<>();
  107. deleteFileWrapper.in(AssoProjectFile::getProjectId, ids);
  108. assoProjectFileService.remove(deleteFileWrapper);
  109. //TODO 删除流程文件
  110. //根据专利挖掘项目删除项目
  111. projectService.removeBatchByIds(ids);
  112. return ids;
  113. }
  114. @Override
  115. public Object updateMessage(Object object, List<MultipartFile> files) {
  116. return null;
  117. }
  118. @Override
  119. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  120. StringRequest stringRequest = new StringRequest();
  121. BeanUtils.copyProperties(groupRequest, stringRequest);
  122. List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
  123. //格式化 分组
  124. GroupConfig groupConfig = null;
  125. if (groupRequest.getGroupBy() != null) {
  126. String json = CommonService.readJsonFile(tableName + ".json");
  127. List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
  128. groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
  129. if (groupConfig == null) {
  130. throw new XiaoShiException("未找到配置");
  131. }
  132. }
  133. tableName = "patent_dig_project as dp left join project as p on dp.project_id =p.id left join rd_project rp on dp.rd_project_id =rp.id ";
  134. tableName+= "left join (select * from asso_project_event where scenario_id is not null ) as asps on p.id = asps.project_id " +
  135. "left join (select * from asso_project_event where event_id is not null ) as aspe on p.id = aspe.project_id " +
  136. "left join (select * from asso_project_event where matter_id is not null ) as aspm on p.id = aspm.project_id";
  137. //返回分组数据
  138. QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
  139. String countFiled="distinct p.id";
  140. ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField(),countFiled);
  141. //装载数据
  142. GroupVO groupVO = new GroupVO();
  143. groupVO.setField(groupRequest.getGroupBy());
  144. groupVO.setValues(reGroupDataVO.getValues());
  145. Records records = new Records();
  146. records.setCurrent(groupRequest.getCurrent());
  147. records.setSize(groupRequest.getSize());
  148. records.setData(groupVO);
  149. records.setTotal(reGroupDataVO.getTotal());
  150. return records;
  151. }
  152. @Override
  153. @Transactional(rollbackFor = Exception.class)
  154. public Object addMessage(Object object) {
  155. //获取登陆人信息 用于设置创建人
  156. PersonnelVO personnelVO = new PersonnelVO();
  157. try {
  158. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  159. } catch (Exception e) {
  160. throw new UnLoginException("未登录");
  161. }
  162. String userId = personnelVO.getId();
  163. PatentDigProjectDTO patentDigProjectDTO = (PatentDigProjectDTO) object;
  164. PatentDigProject patentDigProject = new PatentDigProject();
  165. BeanUtils.copyProperties(patentDigProjectDTO, patentDigProject);
  166. Project project = new Project();
  167. project.setTenantId(personnelVO.getTenantId());
  168. project.setType(3);
  169. project.setHeadId(patentDigProjectDTO.getHeadId());
  170. project.setCreateId(personnelVO.getId());
  171. project.setDescription(patentDigProjectDTO.getDescription());
  172. //TODO 当委托方id或者委托方名称不为空时,
  173. if (patentDigProjectDTO.getEntrustId() != null || patentDigProjectDTO.getEntrustName() != null) {
  174. //根据创建人的租户类型设置project的委托类型
  175. if (personnelVO.getTenantType().equals("1")) {
  176. project.setEntrustType(1);
  177. //当委托方id不为空时
  178. if (patentDigProjectDTO.getEntrustId() != null) {
  179. project.setEntrustId(patentDigProjectDTO.getEntrustId());
  180. }
  181. //若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  182. else {
  183. if (patentDigProjectDTO.getEntrustName() != null && patentDigProjectDTO.getEntrustName().trim() != "") {
  184. ClientDTO clientDTO = new ClientDTO();
  185. clientDTO.setName(patentDigProjectDTO.getEntrustName());
  186. clientDTO.setTenantId(personnelVO.getTenantId());
  187. try {
  188. String res = permissionService.addClient(clientDTO);
  189. JSONObject jsonObject = JSONObject.parseObject(res);
  190. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  191. project.setEntrustId(clientId.toString());
  192. project.setEntrustType(1);
  193. } catch (Exception e) {
  194. throw new XiaoShiException("网络异常");
  195. }
  196. }
  197. }
  198. } else {
  199. if (patentDigProjectDTO.getEntrustId() != null) {
  200. project.setEntrustType(0);
  201. project.setEntrustId(patentDigProjectDTO.getEntrustId());
  202. }
  203. }
  204. }
  205. project.insert();
  206. patentDigProject.setProjectId(project.getId());
  207. RdProject rdProject = new RdProject();
  208. List<RdProject> rdProjects = new ArrayList<>();
  209. if (patentDigProjectDTO.getRdnumber() != null) {
  210. //根据研发项目编号查询研发项目
  211. LambdaQueryWrapper<RdProject> queryWrapper = new LambdaQueryWrapper<>();
  212. queryWrapper.eq(RdProject::getNumber, patentDigProjectDTO.getRdnumber());
  213. rdProjects = rdProjectService.list(queryWrapper);
  214. }
  215. else if (patentDigProjectDTO.getRdName() != null && rdProjects.size() == 0) {
  216. //根据研发项目编号查询研发项目
  217. LambdaQueryWrapper<RdProject> queryWrapper = new LambdaQueryWrapper<>();
  218. queryWrapper.eq(RdProject::getName, patentDigProjectDTO.getRdName());
  219. rdProjects = rdProjectService.list(queryWrapper);
  220. }
  221. if (rdProjects.size() != 0) {
  222. rdProject = rdProjects.get(0);
  223. rdProject.setProductPhase(patentDigProjectDTO.getProductPhase());
  224. rdProject.setProduct(patentDigProjectDTO.getProduct());
  225. rdProject.updateById();
  226. } else {
  227. if (patentDigProjectDTO.getRdName() != null || patentDigProjectDTO.getRdnumber() != null || patentDigProjectDTO.getProduct() != null || patentDigProjectDTO.getProductPhase() != null) {
  228. rdProject.setName(patentDigProjectDTO.getRdName());
  229. rdProject.setCreateId(userId);
  230. rdProject.setTenantId(personnelVO.getTenantId());
  231. rdProject.setNumber(patentDigProjectDTO.getRdnumber());
  232. rdProject.setProductPhase(patentDigProjectDTO.getProductPhase());
  233. rdProject.setProduct(patentDigProjectDTO.getProduct());
  234. rdProject.insert();
  235. }
  236. }
  237. if (rdProject.getId()!=null) {
  238. patentDigProject.setRdProjectId(rdProject.getId());
  239. }
  240. patentDigProject.setState(2);
  241. patentDigProject.setProcess("0");
  242. patentDigProject.setTenantId(personnelVO.getTenantId());
  243. patentDigProject.insert();
  244. /**
  245. * 装载和附件关联
  246. */
  247. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  248. List<String> fileGuids = patentDigProjectDTO.getFileGuids();
  249. if (fileGuids != null && fileGuids.size() != 0) {
  250. for (String fileGuid : fileGuids) {
  251. AssoProjectFile assoProjectFile = new AssoProjectFile();
  252. assoProjectFile.setProjectId(project.getId());
  253. assoProjectFile.setFileGuid(fileGuid);
  254. assoProjectFile.setCreateId(personnelVO.getId());
  255. assoProjectFiles.add(assoProjectFile);
  256. }
  257. if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
  258. assoProjectFileService.saveBatch(assoProjectFiles);
  259. }
  260. }
  261. /**
  262. * 装载事件与project关联
  263. */
  264. List<ProjectEventDTO> events = patentDigProjectDTO.getEvents();
  265. if (events != null && events.size() != 0) {
  266. //遍历传入的事件集合
  267. if (events != null && events.size() != 0) {
  268. assoProjectEventService.addAssoEventProject(events,project.getId(),2);
  269. }
  270. }
  271. /**
  272. *装载参与人
  273. */
  274. if (patentDigProjectDTO.getInvolvedPersonIds() != null && patentDigProjectDTO.getInvolvedPersonIds().size() != 0) {
  275. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  276. patentDigProjectDTO.getInvolvedPersonIds().forEach(item -> {
  277. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  278. assoProjectPerson.setPersonId(item);
  279. assoProjectPerson.setRole(1);
  280. assoProjectPerson.setProjectId(project.getId());
  281. assoProjectPerson.setCreateId(userId);
  282. assoProjectPersonList.add(assoProjectPerson);
  283. });
  284. assoProjectPersonService.saveBatch(assoProjectPersonList);
  285. }
  286. return patentDigProject.getProjectId();
  287. }
  288. @Override
  289. public Object updateMessage(Object object) {
  290. //获取登陆人信息 用于设置创建人
  291. PersonnelVO personnelVO = new PersonnelVO();
  292. try {
  293. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  294. } catch (Exception e) {
  295. throw new UnLoginException("未登录");
  296. }
  297. String userId = personnelVO.getId();
  298. PatentDigProjectUpdateDTO projectUpdateDTO = (PatentDigProjectUpdateDTO) object;
  299. PatentDigProject patentDigProject = new PatentDigProject();
  300. BeanUtils.copyProperties(projectUpdateDTO, patentDigProject);
  301. Project project = projectService.getById(projectUpdateDTO.getId());
  302. project.setHeadId(projectUpdateDTO.getHeadId());
  303. project.setDescription(projectUpdateDTO.getDescription());
  304. //当委托方id不为空时
  305. if (projectUpdateDTO.getEntrustId() != null) {
  306. project.setEntrustId(projectUpdateDTO.getEntrustId());
  307. }
  308. else {//若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  309. if (projectUpdateDTO.getEntrustName() != null && projectUpdateDTO.getEntrustName().trim() != "") {
  310. ClientDTO clientDTO = new ClientDTO();
  311. clientDTO.setName(projectUpdateDTO.getEntrustName());
  312. clientDTO.setTenantId(personnelVO.getTenantId());
  313. try {
  314. String res = permissionService.addClient(clientDTO);
  315. JSONObject jsonObject = JSONObject.parseObject(res);
  316. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  317. project.setEntrustId(clientId.toString());
  318. } catch (Exception e) {
  319. throw new XiaoShiException("网络异常");
  320. }
  321. }
  322. }
  323. project.updateById();
  324. //根据projectId查询专利挖掘项目
  325. LambdaQueryWrapper<PatentDigProject> queryWrapper = new LambdaQueryWrapper<>();
  326. queryWrapper.eq(PatentDigProject::getProjectId, project.getId());
  327. List<PatentDigProject> patentDigProjects = this.list(queryWrapper);
  328. if (patentDigProjects.size() != 0) {
  329. //装载专利挖掘项目基本信息
  330. patentDigProject = patentDigProjects.get(0);
  331. patentDigProject.setName(projectUpdateDTO.getName());
  332. patentDigProject.setIfSearch(projectUpdateDTO.getIfSearch());
  333. patentDigProject.setOutput(projectUpdateDTO.getOutput());
  334. patentDigProject.setTechnicalDirection(projectUpdateDTO.getTechnicalDirection());
  335. patentDigProject.setRelatedCompetitors(projectUpdateDTO.getRelatedCompetitors());
  336. patentDigProject.setTechnicalKeyword(projectUpdateDTO.getTechnicalKeyword());
  337. if (projectUpdateDTO.getProcess() != null) {
  338. patentDigProject.setProcess(projectUpdateDTO.getProcess());
  339. }
  340. }
  341. RdProject rdProject = new RdProject();
  342. List<RdProject> rdProjects = new ArrayList<>();
  343. if (projectUpdateDTO.getRdnumber() != null) {
  344. //根据研发项目编号查询研发项目
  345. LambdaQueryWrapper<RdProject> queryWrappera = new LambdaQueryWrapper<>();
  346. queryWrappera.eq(RdProject::getNumber, projectUpdateDTO.getRdnumber());
  347. rdProjects = rdProjectService.list(queryWrappera);
  348. } else if (projectUpdateDTO.getRdName() != null && rdProjects.size() == 0) {
  349. //根据研发项目编号查询研发项目
  350. LambdaQueryWrapper<RdProject> queryWrappera = new LambdaQueryWrapper<>();
  351. queryWrappera.eq(RdProject::getName, projectUpdateDTO.getRdName());
  352. rdProjects = rdProjectService.list(queryWrappera);
  353. }
  354. if (rdProjects.size() != 0) {
  355. rdProject = rdProjects.get(0);
  356. rdProject.setProductPhase(projectUpdateDTO.getProductPhase());
  357. rdProject.setProduct(projectUpdateDTO.getProduct());
  358. rdProject.updateById();
  359. } else {
  360. if (projectUpdateDTO.getRdName() != null || projectUpdateDTO.getRdnumber() != null || projectUpdateDTO.getProduct() != null || projectUpdateDTO.getProductPhase() != null) {
  361. rdProject.setName(projectUpdateDTO.getRdName());
  362. rdProject.setCreateId(userId);
  363. rdProject.setTenantId(personnelVO.getTenantId());
  364. rdProject.setNumber(projectUpdateDTO.getRdnumber());
  365. rdProject.setProductPhase(projectUpdateDTO.getProductPhase());
  366. rdProject.setProduct(projectUpdateDTO.getProduct());
  367. rdProject.insert();
  368. }
  369. }
  370. if (rdProject.getId() != null) {
  371. patentDigProject.setRdProjectId(rdProject.getId());
  372. }
  373. //移除和附件关联
  374. LambdaQueryWrapper<AssoProjectFile> assoQueryWrapper = new LambdaQueryWrapper<>();
  375. assoQueryWrapper.eq(AssoProjectFile::getProjectId, projectUpdateDTO.getId());
  376. assoProjectFileService.remove(assoQueryWrapper);
  377. /**
  378. * 装载和附件关联
  379. */
  380. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  381. List<String> fileGuids = projectUpdateDTO.getFileGuids();
  382. if (fileGuids != null && fileGuids.size() != 0) {
  383. for (String fileGuid : fileGuids) {
  384. AssoProjectFile assoProjectFile = new AssoProjectFile();
  385. assoProjectFile.setProjectId(project.getId());
  386. assoProjectFile.setFileGuid(fileGuid);
  387. assoProjectFile.setCreateId(personnelVO.getId());
  388. assoProjectFiles.add(assoProjectFile);
  389. }
  390. if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
  391. assoProjectFileService.saveBatch(assoProjectFiles);
  392. }
  393. }
  394. //删除和事件关联
  395. LambdaQueryWrapper<AssoProjectEvent> assoEventQueryWrapper = new LambdaQueryWrapper<>();
  396. assoEventQueryWrapper.eq(AssoProjectEvent::getProjectId, projectUpdateDTO.getId());
  397. assoProjectEventService.remove(assoEventQueryWrapper);
  398. /**
  399. * 装载事件与project关联
  400. */
  401. List<ProjectEventDTO> events = projectUpdateDTO.getEvents();
  402. if (events != null && events.size() != 0) {
  403. assoProjectEventService.addAssoEventProject(events,project.getId(),2);
  404. }
  405. LambdaQueryWrapper<AssoProjectPerson> assoProjectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>();
  406. assoProjectPersonLambdaQueryWrapper.eq(AssoProjectPerson::getProjectId, projectUpdateDTO.getId());
  407. assoProjectPersonService.remove(assoProjectPersonLambdaQueryWrapper);
  408. /**
  409. *装载参与人
  410. */
  411. if (projectUpdateDTO.getInvolvedPersonIds() != null && projectUpdateDTO.getInvolvedPersonIds().size() != 0) {
  412. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  413. projectUpdateDTO.getInvolvedPersonIds().forEach(item -> {
  414. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  415. assoProjectPerson.setPersonId(item);
  416. assoProjectPerson.setRole(1);
  417. assoProjectPerson.setProjectId(project.getId());
  418. assoProjectPerson.setCreateId(userId);
  419. assoProjectPersonList.add(assoProjectPerson);
  420. });
  421. assoProjectPersonService.saveBatch(assoProjectPersonList);
  422. }
  423. return projectUpdateDTO.getId();
  424. }
  425. public Records getRdProjectByNumber(@RequestBody StringRequest stringRequest ) {
  426. List<String> sqls = formatQueryService.reSqls(stringRequest, "rdProject");
  427. //根据sql查询专题库信息
  428. List<RdProject> patentProjectVOS = patentDigProjectMapper.getRdProject(sqls.get(0), sqls.get(1), sqls.get(2));
  429. Long total = patentDigProjectMapper.getRdProjectCount(sqls.get(0));
  430. //装载专利数据库信息
  431. Records records = new Records();
  432. records.setCurrent(stringRequest.getCurrent());
  433. records.setSize(stringRequest.getSize());
  434. records.setData(patentProjectVOS);
  435. records.setTotal(total);
  436. return records;
  437. }
  438. public void loadPatentDigProject(List<PatentDigProjectVO> patentDigProjectVOS) throws IOException {
  439. List<String> createIds = new ArrayList<>();
  440. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  441. List<Integer> ids = new ArrayList<>();
  442. List<String> guids = new ArrayList<>();
  443. List<SystemFile> systemFiles = new ArrayList<>();
  444. List<Personnel> personnels = new ArrayList<>();
  445. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  446. List<Event> events = new ArrayList<>();
  447. List<Scenario> scenarios = new ArrayList<>();
  448. List<Matter> matters = new ArrayList<>();
  449. List<Client> clients = new ArrayList<>();
  450. List<String> departmentIds = new ArrayList<>();
  451. List<Integer> clientIds = new ArrayList<>();
  452. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  453. List<DepartmentVO> departmentVOS = new ArrayList<>();
  454. List<SystemDict> systemDictList = new ArrayList<>();
  455. //获得创建人id集合
  456. patentDigProjectVOS.forEach(
  457. item -> {
  458. if (item.getCreateId() != null) {
  459. createIds.add(item.getCreateId());
  460. }
  461. if (item.getHeadId() != null) {
  462. createIds.add(item.getHeadId());
  463. }
  464. if (item.getId() != null) {
  465. ids.add(item.getId());
  466. }
  467. if (item.getEntrustType() != null && item.getEntrustType().equals(2)) {
  468. departmentIds.add(item.getEntrustId());
  469. }
  470. if (item.getEntrustType() != null && item.getEntrustType().equals(1)) {
  471. clientIds.add(Integer.parseInt(item.getEntrustId()));
  472. }
  473. }
  474. );
  475. if (ids.size() != 0) {
  476. //根据事件id获得专利数据库文件关联表
  477. LambdaQueryWrapper<AssoProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  478. queryWrapper.in(AssoProjectFile::getProjectId, ids);
  479. assoProjectFiles = assoProjectFileService.list(queryWrapper);
  480. guids = assoProjectFiles.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
  481. //
  482. LambdaQueryWrapper<SystemDict> systemDictLambdaQueryWrapper = new LambdaQueryWrapper<>();
  483. systemDictLambdaQueryWrapper.eq(SystemDict::getType, "REPORT_STATE");
  484. systemDictList = systemDictService.list(systemDictLambdaQueryWrapper);
  485. }
  486. //查询文件
  487. if (guids.size() != 0) {
  488. String res = fileManagerService.getSystemFileFromFMS(guids);
  489. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  490. }
  491. //查询应用场景、调查类型、事件和专题库的关联
  492. if (ids != null && ids.size() > 0) {
  493. LambdaQueryWrapper<AssoProjectEvent> assoProjectEventQueryWrapper = new LambdaQueryWrapper<>();
  494. assoProjectEventQueryWrapper.in(AssoProjectEvent::getProjectId, ids);
  495. assoProjectEvents = assoProjectEventService.list(assoProjectEventQueryWrapper);
  496. //查询事件
  497. if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
  498. scenarios = scenarioService.list();
  499. matters = matterService.list();
  500. List<Integer> eventIds = assoProjectEvents.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
  501. if (eventIds.size() != 0) {
  502. LambdaQueryWrapper<Event> eventQueryWrapper = new LambdaQueryWrapper<>();
  503. eventQueryWrapper.in(Event::getId, eventIds);
  504. events = eventService.list(eventQueryWrapper);
  505. }
  506. }
  507. //查询部门名称
  508. if (departmentIds.size() != 0) {
  509. String json = permissionService.getDepartmentByIdsFromPCS(departmentIds);
  510. departmentVOS = JSON.parseArray(json, DepartmentVO.class);
  511. }
  512. //查询和参与人关联
  513. LambdaQueryWrapper<AssoProjectPerson> projectPersonLambdaQueryWrapper = new LambdaQueryWrapper<>();
  514. projectPersonLambdaQueryWrapper.in(AssoProjectPerson::getProjectId, ids);
  515. assoProjectPersonList = assoProjectPersonService.list(projectPersonLambdaQueryWrapper);
  516. List<String> personIds = assoProjectPersonList.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  517. createIds.addAll(personIds);
  518. }
  519. //查询创建人名称
  520. if (createIds.size() != 0) {
  521. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  522. JSONObject jsonObject = JSONObject.parseObject(res);
  523. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  524. }
  525. //查询客户名称
  526. if (clientIds.size() != 0) {
  527. String res = permissionService.getClientByIdsFromPCS(clientIds);
  528. JSONObject jsonObject = JSONObject.parseObject(res);
  529. clients = JSONObject.parseArray(jsonObject.getString("data"), Client.class);
  530. }
  531. //装载信息
  532. for (PatentDigProjectVO patentDigProjectVO : patentDigProjectVOS) {
  533. //装载人员信息
  534. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(patentDigProjectVO.getCreateId())).findFirst().orElse(null);
  535. if (personnel != null) {
  536. patentDigProjectVO.setCreateName(personnel.getPersonnelName());
  537. }
  538. if (patentDigProjectVO.getHeadId() != null) {
  539. Personnel headPersonnel = personnels.stream().filter(item -> item.getId().equals(patentDigProjectVO.getHeadId())).findFirst().orElse(null);
  540. if (headPersonnel != null) {
  541. patentDigProjectVO.setHeadName(headPersonnel.getPersonnelName());
  542. }
  543. }
  544. //装载参与人
  545. List<SimplePersonVO> simplePersonVOS = new ArrayList<>();
  546. List<AssoProjectPerson> assoProjectPersonTmps = assoProjectPersonList.stream().filter(item -> item.getProjectId().equals(patentDigProjectVO.getId())).collect(Collectors.toList());
  547. List<String> personIds = assoProjectPersonTmps.stream().map(AssoProjectPerson::getPersonId).collect(Collectors.toList());
  548. if (personIds.size() != 0) {
  549. List<Personnel> personneltmps = personnels.stream().filter(item -> personIds.contains(item.getId())).collect(Collectors.toList());
  550. personneltmps.forEach(item -> {
  551. SimplePersonVO simplePersonVO = new SimplePersonVO();
  552. simplePersonVO.setPersonId(item.getId());
  553. simplePersonVO.setPersonName(item.getPersonnelName());
  554. simplePersonVOS.add(simplePersonVO);
  555. });
  556. }
  557. patentDigProjectVO.setInvolvedPersons(simplePersonVOS);
  558. //装载文件信息
  559. List<AssoProjectFile> assoProjectFileTemp = assoProjectFiles.stream().filter(item -> item.getProjectId().equals(patentDigProjectVO.getId())).collect(Collectors.toList());
  560. if (assoProjectFileTemp.size() != 0) {
  561. List<String> guidTemp = assoProjectFileTemp.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
  562. if (guidTemp.size() != 0) {
  563. List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
  564. if (systemFileTemp.size() != 0) {
  565. patentDigProjectVO.setSystemFileList(systemFileTemp);
  566. }
  567. }
  568. }
  569. //装载事件 应用场景,处理事项
  570. List<Integer> eventIds = new ArrayList<>();
  571. List<Integer> matterIds = new ArrayList<>();
  572. List<Integer> scenarioIds = new ArrayList<>();
  573. List<String> eventTmpNames = new ArrayList<>();
  574. List<String> matterTmpNames = new ArrayList<>();
  575. List<String> scenarioTmpNames = new ArrayList<>();
  576. if (assoProjectEvents != null) {
  577. List<AssoProjectEvent> assoProjectEventTmps = assoProjectEvents.stream().filter(item -> item.getProjectId().equals(patentDigProjectVO.getId())).collect(Collectors.toList());
  578. if (assoProjectEventTmps.size() != 0) {
  579. //过滤出事件
  580. eventIds = assoProjectEventTmps.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
  581. matterIds = assoProjectEventTmps.stream().filter(item -> item.getMatterId() != null).map(AssoProjectEvent::getMatterId).collect(Collectors.toList());
  582. scenarioIds = assoProjectEventTmps.stream().filter(item -> item.getScenarioId() != null).map(AssoProjectEvent::getScenarioId).collect(Collectors.toList());
  583. List<Integer> eventIdsFilter = eventIds;
  584. List<Integer> matterIdsFilter = matterIds;
  585. List<Integer> scenarioIdsFilter = scenarioIds;
  586. List<Event> eventTmps = events.stream().filter(item -> eventIdsFilter.contains(item.getId())).collect(Collectors.toList());
  587. List<Matter> matterTmps = matters.stream().filter(item -> matterIdsFilter.contains(item.getId())).collect(Collectors.toList());
  588. List<Scenario> scenarioTmps = scenarios.stream().filter(item -> scenarioIdsFilter.contains(item.getId())).collect(Collectors.toList());
  589. eventTmpNames = eventTmps.stream().map(Event::getName).collect(Collectors.toList());
  590. eventIds = eventTmps.stream().map(Event::getId).collect(Collectors.toList());
  591. matterTmpNames = matterTmps.stream().map(Matter::getName).collect(Collectors.toList());
  592. matterIds = matterTmps.stream().map(Matter::getId).collect(Collectors.toList());
  593. scenarioTmpNames = scenarioTmps.stream().map(Scenario::getName).collect(Collectors.toList());
  594. scenarioIds = scenarioTmps.stream().map(Scenario::getId).collect(Collectors.toList());
  595. }
  596. }
  597. patentDigProjectVO.setScenarioIds(scenarioIds);
  598. patentDigProjectVO.setMatterIds(matterIds);
  599. patentDigProjectVO.setEventIds(eventIds);
  600. patentDigProjectVO.setScenarioNames(scenarioTmpNames);
  601. patentDigProjectVO.setMatterNames(matterTmpNames);
  602. patentDigProjectVO.setEventNames(eventTmpNames);
  603. //裝載委托方
  604. if (patentDigProjectVO.getEntrustType() != null) {
  605. //当委托方为客户时
  606. if (patentDigProjectVO.getEntrustType().equals(1)) {
  607. Client client = clients.stream().filter(item -> item.getId().equals(Integer.parseInt(patentDigProjectVO.getEntrustId()))).findFirst().orElse(null);
  608. if (client != null) {
  609. patentDigProjectVO.setEntrustName(client.getName());
  610. }
  611. } else if (patentDigProjectVO.getEntrustType().equals(2)) {
  612. DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(patentDigProjectVO.getEntrustId())).findFirst().orElse(null);
  613. if (departmentVO != null) {
  614. patentDigProjectVO.setEntrustName(departmentVO.getDepartName());
  615. }
  616. }
  617. }
  618. //装载报告状态
  619. SystemDict systemDictStatus = systemDictList.stream().filter(item -> patentDigProjectVO.getState().equals(Integer.parseInt(item.getValue()))&&item.getType().equals("REPORT_STATE")).findFirst().orElse(null);
  620. if (systemDictStatus != null) {
  621. patentDigProjectVO.setStateName(systemDictStatus.getLabel());
  622. }
  623. }
  624. }
  625. //装载查询语句
  626. private List<String> loadSearchSql(List<String> sqls){
  627. PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
  628. String id =personnelVO.getId();
  629. Integer tenantId= personnelVO.getTenantId();
  630. Integer roleType = personnelVO.getRoleType();
  631. String rootSql = "";
  632. if (roleType == null || roleType.equals(0)) {
  633. rootSql ="(p.create_id ="+id+" or p.head_id="+id+" or p.id in (select project_id from asso_project_person where person_id ="+id+"))";
  634. }
  635. else if(roleType.equals(2))
  636. {
  637. rootSql="p.tenant_id="+tenantId;
  638. }
  639. if (sqls.get(0) != null && !sqls.get(0).equals("") && !rootSql.equals("")) {
  640. sqls.set(0, rootSql + " and" + "(" + sqls.get(0) + ")");
  641. } else if ((sqls.get(0) == null || sqls.get(0).equals("")) && !rootSql.equals("")) {
  642. sqls.set(0, rootSql);
  643. }
  644. return sqls;
  645. }
  646. }