PatentDigProjectService.java 36 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755
  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.apache.commons.lang3.StringUtils;
  33. import org.springframework.beans.BeanUtils;
  34. import org.springframework.beans.factory.annotation.Autowired;
  35. import org.springframework.stereotype.Service;
  36. import org.springframework.transaction.annotation.Transactional;
  37. import org.springframework.web.bind.annotation.RequestBody;
  38. import org.springframework.web.multipart.MultipartFile;
  39. import java.io.IOException;
  40. import java.util.ArrayList;
  41. import java.util.List;
  42. import java.util.stream.Collectors;
  43. @Service
  44. public class PatentDigProjectService extends ServiceImpl<PatentDigProjectMapper, PatentDigProject> implements Business {
  45. @Autowired
  46. private RdProjectService rdProjectService;
  47. @Autowired
  48. private AssoProjectFileService assoProjectFileService;
  49. @Autowired
  50. private ProjectService projectService;
  51. @Autowired
  52. private FormatQueryService formatQueryService;
  53. @Autowired
  54. private PatentDigProjectMapper patentDigProjectMapper;
  55. @Autowired
  56. private FileManagerService fileManagerService;
  57. @Autowired
  58. private PermissionService permissionService;
  59. @Autowired
  60. private CacheUtils cacheUtils;
  61. @Autowired
  62. private LoginUtils loginUtils;
  63. @Autowired
  64. private AssoProjectEventService assoProjectEventService;
  65. @Autowired
  66. private EventService eventService;
  67. @Autowired
  68. private AssoProjectPersonService assoProjectPersonService;
  69. @Autowired
  70. private MatterService matterService;
  71. @Autowired
  72. private ScenarioService scenarioService;
  73. @Autowired
  74. private QueryGroupFactory queryGroupFactory;
  75. @Autowired
  76. private SystemDictService systemDictService;
  77. @Override
  78. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  79. List<String> sqls = formatQueryService.reSqls(queryRequest, "patentDigProject");
  80. //根据sql查询专题库信息
  81. sqls = this.loadSearchSql(sqls);
  82. List<PatentDigProjectVO> patentProjectVOS = patentDigProjectMapper.getPatentDigProject(sqls.get(0), sqls.get(1), sqls.get(2));
  83. Long total = patentDigProjectMapper.getPatentDigCount(sqls.get(0));
  84. //装载专利数据库信息
  85. this.loadPatentDigProject(patentProjectVOS);
  86. Records records = new Records();
  87. records.setCurrent(queryRequest.getCurrent());
  88. records.setSize(queryRequest.getSize());
  89. records.setData(patentProjectVOS);
  90. records.setTotal(total);
  91. return records;
  92. }
  93. @Override
  94. public Object addMessage(Object object, List<MultipartFile> files) {
  95. return null;
  96. }
  97. @Override
  98. public Object deleteMessage(List<Integer> ids) throws IOException {
  99. if (ids == null || ids.size() == 0) {
  100. throw new XiaoShiException("ids不能为空");
  101. }
  102. //根据projectId 删除专利挖掘项目
  103. LambdaQueryWrapper<PatentDigProject> digProjectQueryWrapper = new LambdaQueryWrapper<>();
  104. digProjectQueryWrapper.in(PatentDigProject::getProjectId, ids);
  105. this.remove(digProjectQueryWrapper);
  106. //根据projectId 删除相关文件
  107. LambdaQueryWrapper<AssoProjectFile> deleteFileWrapper = new LambdaQueryWrapper<>();
  108. deleteFileWrapper.in(AssoProjectFile::getProjectId, ids);
  109. assoProjectFileService.remove(deleteFileWrapper);
  110. //TODO 删除流程文件
  111. //根据专利挖掘项目删除项目
  112. projectService.removeBatchByIds(ids);
  113. return ids;
  114. }
  115. @Override
  116. public Object updateMessage(Object object, List<MultipartFile> files) {
  117. return null;
  118. }
  119. @Override
  120. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  121. StringRequest stringRequest = new StringRequest();
  122. BeanUtils.copyProperties(groupRequest, stringRequest);
  123. List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
  124. sqls = this.loadSearchSql(sqls);
  125. //格式化 分组
  126. GroupConfig groupConfig = null;
  127. if (groupRequest.getGroupBy() != null) {
  128. String json = CommonService.readJsonFile(tableName + ".json");
  129. List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
  130. groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
  131. if (groupConfig == null) {
  132. throw new XiaoShiException("未找到配置");
  133. }
  134. }
  135. tableName = "( select p.id as id ,p.create_id as createId,p.tenant_id as tenantId,p.head_id as headId,asps.scenario_id as scenarioId,aspm.matter_id as matterId,p.create_time as createTime ,entrust_id as entrustId,entrust_type as entrustType ,aspe.event_id as eventId from 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 ";
  136. tableName += "left join (select * from asso_project_event where scenario_id is not null ) as asps on p.id = asps.project_id " +
  137. "left join (select * from asso_project_event where event_id is not null ) as aspe on p.id = aspe.project_id " +
  138. "left join (select * from asso_project_event where matter_id is not null ) as aspm on p.id = aspm.project_id) as t";
  139. //返回分组数据
  140. QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
  141. String countFiled = "distinct t.id";
  142. ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField(), countFiled);
  143. //装载数据
  144. GroupVO groupVO = new GroupVO();
  145. groupVO.setField(groupRequest.getGroupBy());
  146. groupVO.setValues(reGroupDataVO.getValues());
  147. Records records = new Records();
  148. records.setCurrent(groupRequest.getCurrent());
  149. records.setSize(groupRequest.getSize());
  150. records.setData(groupVO);
  151. records.setTotal(reGroupDataVO.getTotal());
  152. return records;
  153. }
  154. @Override
  155. @Transactional(rollbackFor = Exception.class)
  156. public Object addMessage(Object object) {
  157. //获取登陆人信息 用于设置创建人
  158. PersonnelVO personnelVO = new PersonnelVO();
  159. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  160. String userId = personnelVO.getId();
  161. PatentDigProjectDTO patentDigProjectDTO = (PatentDigProjectDTO) object;
  162. Integer id = patentDigProjectDTO.getId();
  163. PatentDigProject patentDigProject = new PatentDigProject();
  164. BeanUtils.copyProperties(patentDigProjectDTO, patentDigProject);
  165. Project project = new Project();
  166. project.setTenantId(personnelVO.getTenantId());
  167. project.setType(3);
  168. project.setHeadId(patentDigProjectDTO.getHeadId());
  169. project.setCreateId(personnelVO.getId());
  170. project.setDescription(patentDigProjectDTO.getDescription());
  171. //TODO 当委托方id或者委托方名称不为空时,
  172. if (patentDigProjectDTO.getEntrustId() != null || patentDigProjectDTO.getEntrustName() != null) {
  173. //根据创建人的租户类型设置project的委托类型
  174. if (personnelVO.getTenantType().equals("1")) {
  175. project.setEntrustType(1);
  176. //当委托方id不为空时
  177. if (StringUtils.isNotEmpty(patentDigProjectDTO.getEntrustId()) && !StringUtils.equals(patentDigProjectDTO.getEntrustId(), "-1")) {
  178. project.setEntrustId(patentDigProjectDTO.getEntrustId());
  179. }
  180. //若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  181. else {
  182. if (patentDigProjectDTO.getEntrustName() != null && patentDigProjectDTO.getEntrustName().trim() != "") {
  183. ClientDTO clientDTO = new ClientDTO();
  184. clientDTO.setName(patentDigProjectDTO.getEntrustName());
  185. clientDTO.setTenantId(personnelVO.getTenantId());
  186. try {
  187. String res = permissionService.addClient(clientDTO);
  188. JSONObject jsonObject = JSONObject.parseObject(res);
  189. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  190. project.setEntrustId(clientId.toString());
  191. project.setEntrustType(1);
  192. } catch (Exception e) {
  193. throw new XiaoShiException("网络异常");
  194. }
  195. }
  196. }
  197. } else {
  198. if (patentDigProjectDTO.getEntrustId() != null) {
  199. project.setEntrustType(0);
  200. project.setEntrustId(patentDigProjectDTO.getEntrustId());
  201. }
  202. }
  203. }
  204. if (id != null) {
  205. project.setId(id);
  206. project.updateById();
  207. } else {
  208. project.insert();
  209. }
  210. patentDigProject.setProjectId(project.getId());
  211. RdProject rdProject = new RdProject();
  212. List<RdProject> rdProjects = new ArrayList<>();
  213. if (patentDigProjectDTO.getRdnumber() != null) {
  214. //根据研发项目编号查询研发项目
  215. LambdaQueryWrapper<RdProject> queryWrapper = new LambdaQueryWrapper<>();
  216. queryWrapper.eq(RdProject::getNumber, patentDigProjectDTO.getRdnumber());
  217. rdProjects = rdProjectService.list(queryWrapper);
  218. } else if (patentDigProjectDTO.getRdName() != null && rdProjects.size() == 0) {
  219. //根据研发项目编号查询研发项目
  220. LambdaQueryWrapper<RdProject> queryWrapper = new LambdaQueryWrapper<>();
  221. queryWrapper.eq(RdProject::getName, patentDigProjectDTO.getRdName());
  222. rdProjects = rdProjectService.list(queryWrapper);
  223. }
  224. if (rdProjects.size() != 0) {
  225. rdProject = rdProjects.get(0);
  226. rdProject.setProductPhase(patentDigProjectDTO.getProductPhase());
  227. rdProject.setProduct(patentDigProjectDTO.getProduct());
  228. rdProject.updateById();
  229. } else {
  230. if (patentDigProjectDTO.getRdName() != null || patentDigProjectDTO.getRdnumber() != null || patentDigProjectDTO.getProduct() != null || patentDigProjectDTO.getProductPhase() != null) {
  231. rdProject.setName(patentDigProjectDTO.getRdName());
  232. rdProject.setCreateId(userId);
  233. rdProject.setTenantId(personnelVO.getTenantId());
  234. rdProject.setNumber(patentDigProjectDTO.getRdnumber());
  235. rdProject.setProductPhase(patentDigProjectDTO.getProductPhase());
  236. rdProject.setProduct(patentDigProjectDTO.getProduct());
  237. rdProject.insert();
  238. }
  239. }
  240. if (rdProject.getId() != null) {
  241. patentDigProject.setRdProjectId(rdProject.getId());
  242. }
  243. patentDigProject.setState(2);
  244. patentDigProject.setProcess("0");
  245. patentDigProject.setTenantId(personnelVO.getTenantId());
  246. patentDigProject.insert();
  247. /**
  248. * 装载和附件关联
  249. */
  250. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  251. List<String> fileGuids = patentDigProjectDTO.getFileGuids();
  252. if (fileGuids != null && fileGuids.size() != 0) {
  253. for (String fileGuid : fileGuids) {
  254. AssoProjectFile assoProjectFile = new AssoProjectFile();
  255. assoProjectFile.setProjectId(project.getId());
  256. assoProjectFile.setFileGuid(fileGuid);
  257. assoProjectFile.setCreateId(personnelVO.getId());
  258. assoProjectFiles.add(assoProjectFile);
  259. }
  260. if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
  261. assoProjectFileService.saveBatch(assoProjectFiles);
  262. }
  263. }
  264. /**
  265. * 装载事件与project关联
  266. */
  267. List<ProjectEventDTO> events = patentDigProjectDTO.getEvents();
  268. if (events != null && events.size() != 0) {
  269. //遍历传入的事件集合
  270. if (events != null && events.size() != 0) {
  271. assoProjectEventService.addAssoEventProject(events, project.getId(), 2);
  272. }
  273. }
  274. /**
  275. *装载参与人
  276. */
  277. if (patentDigProjectDTO.getInvolvedPersonIds() != null && patentDigProjectDTO.getInvolvedPersonIds().size() != 0) {
  278. List<AssoProjectPerson> assoProjectPersonList = new ArrayList<>();
  279. patentDigProjectDTO.getInvolvedPersonIds().forEach(item -> {
  280. AssoProjectPerson assoProjectPerson = new AssoProjectPerson();
  281. assoProjectPerson.setPersonId(item);
  282. assoProjectPerson.setRole(1);
  283. assoProjectPerson.setProjectId(project.getId());
  284. assoProjectPerson.setCreateId(userId);
  285. assoProjectPersonList.add(assoProjectPerson);
  286. });
  287. assoProjectPersonService.saveBatch(assoProjectPersonList);
  288. }
  289. return patentDigProject.getProjectId();
  290. }
  291. @Override
  292. @Transactional(rollbackFor = Exception.class)
  293. public Object updateMessage(Object object) {
  294. //获取登陆人信息 用于设置创建人
  295. PersonnelVO personnelVO = new PersonnelVO();
  296. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  297. String userId = personnelVO.getId();
  298. PatentDigProjectUpdateDTO projectUpdateDTO = (PatentDigProjectUpdateDTO) object;
  299. PatentDigProject patentDigProject = new PatentDigProject();
  300. Project project = projectService.getById(projectUpdateDTO.getId());
  301. project.setHeadId(projectUpdateDTO.getHeadId());
  302. project.setDescription(projectUpdateDTO.getDescription());
  303. //当委托方id不为空时
  304. if (StringUtils.isNotEmpty(projectUpdateDTO.getEntrustId()) && !StringUtils.equals(projectUpdateDTO.getEntrustId(), "-1")) {
  305. project.setEntrustId(projectUpdateDTO.getEntrustId());
  306. } else {//若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  307. if (projectUpdateDTO.getEntrustName() != null && projectUpdateDTO.getEntrustName().trim() != "") {
  308. ClientDTO clientDTO = new ClientDTO();
  309. clientDTO.setName(projectUpdateDTO.getEntrustName());
  310. clientDTO.setTenantId(personnelVO.getTenantId());
  311. try {
  312. String res = permissionService.addClient(clientDTO);
  313. JSONObject jsonObject = JSONObject.parseObject(res);
  314. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  315. project.setEntrustId(clientId.toString());
  316. } catch (Exception e) {
  317. throw new XiaoShiException("网络异常");
  318. }
  319. }
  320. }
  321. project.updateById();
  322. //根据projectId查询专利挖掘项目
  323. LambdaQueryWrapper<PatentDigProject> queryWrapper = new LambdaQueryWrapper<>();
  324. queryWrapper.eq(PatentDigProject::getProjectId, project.getId());
  325. List<PatentDigProject> patentDigProjects = this.list(queryWrapper);
  326. if (patentDigProjects.size() != 0) {
  327. //装载专利挖掘项目基本信息
  328. patentDigProject = patentDigProjects.get(0);
  329. patentDigProject.setName(projectUpdateDTO.getName());
  330. patentDigProject.setIfSearch(projectUpdateDTO.getIfSearch());
  331. patentDigProject.setOutput(projectUpdateDTO.getOutput());
  332. patentDigProject.setTechnicalDirection(projectUpdateDTO.getTechnicalDirection());
  333. patentDigProject.setRelatedCompetitors(projectUpdateDTO.getRelatedCompetitors());
  334. patentDigProject.setTechnicalKeyword(projectUpdateDTO.getTechnicalKeyword());
  335. if (projectUpdateDTO.getProcess() != null) {
  336. patentDigProject.setProcess(projectUpdateDTO.getProcess());
  337. }
  338. }
  339. RdProject rdProject = new RdProject();
  340. List<RdProject> rdProjects = new ArrayList<>();
  341. if (projectUpdateDTO.getRdnumber() != null) {
  342. //根据研发项目编号查询研发项目
  343. LambdaQueryWrapper<RdProject> queryWrappera = new LambdaQueryWrapper<>();
  344. queryWrappera.eq(RdProject::getNumber, projectUpdateDTO.getRdnumber());
  345. rdProjects = rdProjectService.list(queryWrappera);
  346. } else if (projectUpdateDTO.getRdName() != null && rdProjects.size() == 0) {
  347. //根据研发项目编号查询研发项目
  348. LambdaQueryWrapper<RdProject> queryWrappera = new LambdaQueryWrapper<>();
  349. queryWrappera.eq(RdProject::getName, projectUpdateDTO.getRdName());
  350. rdProjects = rdProjectService.list(queryWrappera);
  351. }
  352. if (rdProjects.size() != 0) {
  353. rdProject = rdProjects.get(0);
  354. rdProject.setProductPhase(projectUpdateDTO.getProductPhase());
  355. rdProject.setProduct(projectUpdateDTO.getProduct());
  356. rdProject.updateById();
  357. } else {
  358. if (projectUpdateDTO.getRdName() != null || projectUpdateDTO.getRdnumber() != null || projectUpdateDTO.getProduct() != null || projectUpdateDTO.getProductPhase() != null) {
  359. rdProject.setName(projectUpdateDTO.getRdName());
  360. rdProject.setCreateId(userId);
  361. rdProject.setTenantId(personnelVO.getTenantId());
  362. rdProject.setNumber(projectUpdateDTO.getRdnumber());
  363. rdProject.setProductPhase(projectUpdateDTO.getProductPhase());
  364. rdProject.setProduct(projectUpdateDTO.getProduct());
  365. rdProject.insert();
  366. }
  367. }
  368. if (rdProject.getId() != null) {
  369. patentDigProject.setRdProjectId(rdProject.getId());
  370. }
  371. //更新专利挖掘项目
  372. patentDigProject.updateById();
  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 && systemFiles != null) {
  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 = "(t.createId =" + id + " or t.headId=" + id + " or t.id in (select project_id from asso_project_person where person_id =" + id + "))";
  634. } else if (roleType.equals(2)) {
  635. rootSql = "t.tenantId=" + tenantId;
  636. }
  637. if (sqls.get(0) != null && !sqls.get(0).equals("") && !rootSql.equals("")) {
  638. sqls.set(0, rootSql + " and" + "(" + sqls.get(0) + ")");
  639. } else if ((sqls.get(0) == null || sqls.get(0).equals("")) && !rootSql.equals("")) {
  640. sqls.set(0, rootSql);
  641. }
  642. return sqls;
  643. }
  644. }