PatentProjectService.java 45 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986
  1. package cn.cslg.pas.service.business;
  2. import cn.cslg.pas.common.dto.ClientDTO;
  3. import cn.cslg.pas.common.dto.business.*;
  4. import cn.cslg.pas.common.model.cronModel.*;
  5. import cn.cslg.pas.common.model.request.GroupRequest;
  6. import cn.cslg.pas.common.model.request.QueryRequest;
  7. import cn.cslg.pas.common.model.request.StringRequest;
  8. import cn.cslg.pas.common.utils.CacheUtils;
  9. import cn.cslg.pas.common.utils.LoginUtils;
  10. import cn.cslg.pas.common.vo.DepartmentVO;
  11. import cn.cslg.pas.common.vo.ProductOrCategoryVO;
  12. import cn.cslg.pas.common.vo.business.PatentProjectVO;
  13. import cn.cslg.pas.common.vo.business.ReportCountVO;
  14. import cn.cslg.pas.domain.business.*;
  15. import cn.cslg.pas.exception.UnLoginException;
  16. import cn.cslg.pas.exception.XiaoShiException;
  17. import cn.cslg.pas.factorys.businessFactory.Business;
  18. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupFactory;
  19. import cn.cslg.pas.factorys.reGroupFactory.QueryGroupImp;
  20. import cn.cslg.pas.mapper.PatentProjectMapper;
  21. import cn.cslg.pas.service.common.FileManagerService;
  22. import cn.cslg.pas.service.permissions.PermissionService;
  23. import cn.cslg.pas.service.query.FormatQueryService;
  24. import com.alibaba.fastjson.JSON;
  25. import com.alibaba.fastjson.JSONObject;
  26. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  27. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  28. import lombok.extern.slf4j.Slf4j;
  29. import org.springframework.beans.BeanUtils;
  30. import org.springframework.beans.factory.annotation.Autowired;
  31. import org.springframework.stereotype.Service;
  32. import org.springframework.transaction.annotation.Transactional;
  33. import org.springframework.web.multipart.MultipartFile;
  34. import java.io.IOException;
  35. import java.util.ArrayList;
  36. import java.util.Arrays;
  37. import java.util.List;
  38. import java.util.stream.Collectors;
  39. @Service
  40. @Slf4j
  41. public class PatentProjectService extends ServiceImpl<PatentProjectMapper, PatentProject> implements Business {
  42. @Autowired
  43. private PatentProjectMapper patentProjectMapper;
  44. @Autowired
  45. private FormatQueryService formatQueryService;
  46. @Autowired
  47. private QueryGroupFactory queryGroupFactory;
  48. @Autowired
  49. private CacheUtils cacheUtils;
  50. @Autowired
  51. private LoginUtils loginUtils;
  52. @Autowired
  53. private PermissionService permissionService;
  54. @Autowired
  55. private AssoProjectEventService assoProjectEventService;
  56. @Autowired
  57. private AssoProjectTreeNodeService assoProjectTreeNodeService;
  58. @Autowired
  59. private AssoProjectFileService assoProjectFileService;
  60. @Autowired
  61. private FileManagerService fileManagerService;
  62. @Autowired
  63. private AssoProjectService assoProjectService;
  64. @Autowired
  65. private EventService eventService;
  66. @Autowired
  67. private ScenarioService scenarioService;
  68. @Autowired
  69. private MatterService matterService;
  70. @Autowired
  71. private ProductService productService;
  72. @Autowired
  73. private ProductCategoryService productCategoryService;
  74. @Autowired
  75. private ProjectService projectService;
  76. @Autowired
  77. private AssoProjectScenarioService assoProjectScenarioService;
  78. @Override
  79. @Transactional(rollbackFor = Exception.class)
  80. public Object queryMessage(QueryRequest queryRequest) throws Exception {
  81. List<String> sqls = formatQueryService.reSqls(queryRequest, "patentProject");
  82. sqls =this.loadSearchSql(sqls);
  83. //根据sql查询专题库信息
  84. List<PatentProjectVO> patentProjectVOS = patentProjectMapper.getPatentProject(sqls.get(0), sqls.get(1), sqls.get(2));
  85. Long total = patentProjectMapper.getPatentProjectCount(sqls.get(0));
  86. //装载专利数据库信息
  87. this.loadPatentProject(patentProjectVOS);
  88. Records records = new Records();
  89. records.setCurrent(queryRequest.getCurrent());
  90. records.setSize(queryRequest.getSize());
  91. records.setData(patentProjectVOS);
  92. records.setTotal(total);
  93. return records;
  94. }
  95. @Override
  96. @Transactional(rollbackFor = Exception.class)
  97. public Integer addMessage(Object object, List<MultipartFile> files) {
  98. return null;
  99. }
  100. /**
  101. * @param object
  102. * @param files
  103. * @return
  104. */
  105. @Override
  106. @Transactional(rollbackFor = Exception.class)
  107. public Object updateMessage(Object object, List<MultipartFile> files) {
  108. return null;
  109. }
  110. @Override
  111. @Transactional(rollbackFor = Exception.class)
  112. public Object deleteMessage(List<Integer> ids) throws IOException {
  113. //TODO 检查是否有关联报告,如果有则提示不允许删除
  114. LambdaQueryWrapper<AssoProject> reportExistWrapper = new LambdaQueryWrapper<>();
  115. reportExistWrapper.in(AssoProject::getProjectId, ids);
  116. reportExistWrapper.eq(AssoProject::getAssoProjectType, 2);
  117. List<AssoProject> assoProjects = assoProjectService.list(reportExistWrapper);
  118. if (assoProjects.size() != 0) {
  119. throw new XiaoShiException("待删除专题库集合中有关联报告,无法删除!");
  120. }
  121. //TODO 根据id删除专利数据库和文件关联表
  122. LambdaQueryWrapper<AssoProjectFile> deleteFileWrapper = new LambdaQueryWrapper<>();
  123. deleteFileWrapper.in(AssoProjectFile::getProjectId, ids);
  124. assoProjectFileService.remove(deleteFileWrapper);
  125. //TODO 根据id删除专利数据库和事件的关联表
  126. LambdaQueryWrapper<AssoProjectEvent> deleteEventWrapper = new LambdaQueryWrapper<>();
  127. deleteEventWrapper.in(AssoProjectEvent::getProjectId, ids);
  128. assoProjectEventService.remove(deleteEventWrapper);
  129. //TODO 根据id删除专利数据库的自定义字段的标引(es部分,暂时不做)
  130. //TODO 根据id删除专利数据库的自定义字段(自定义字段模块未完成,暂时不做)
  131. //TODO 根据id删除专利数据库和应用场景关联
  132. LambdaQueryWrapper<AssoProjectScenario> deleteScenarioWrapper = new LambdaQueryWrapper<>();
  133. deleteScenarioWrapper.in(AssoProjectScenario::getProjectId, ids);
  134. assoProjectScenarioService.remove(deleteScenarioWrapper);
  135. //TODO 根据id删除任务信息(任务模块未完成,暂时不做)
  136. //TODO 根据id删除任专利关联信息(es部分,暂时不做)
  137. //TODO 根据id删除导入任务信息(导入任务模块未完成,暂时不做)
  138. //删除专利数据库
  139. LambdaQueryWrapper<PatentProject> patentProjectLambdaQueryWrapper = new LambdaQueryWrapper<>();
  140. patentProjectLambdaQueryWrapper.in(PatentProject::getProjectId, ids);
  141. this.remove(patentProjectLambdaQueryWrapper);
  142. projectService.removeBatchByIds(ids);
  143. //
  144. return ids;
  145. }
  146. /**
  147. * 查询专题库分组信息
  148. *
  149. * @param groupRequest
  150. * @return
  151. * @throws Exception
  152. */
  153. @Transactional(rollbackFor = Exception.class)
  154. public Object getGroup(GroupRequest groupRequest, String tableName) throws Exception {
  155. StringRequest stringRequest = new StringRequest();
  156. BeanUtils.copyProperties(groupRequest, stringRequest);
  157. List<String> sqls = formatQueryService.reSqls(stringRequest, tableName);
  158. sqls=this.loadSearchSql(sqls);
  159. //格式化 分组
  160. GroupConfig groupConfig = null;
  161. if (groupRequest.getGroupBy() != null) {
  162. String json = CommonService.readJsonFile(tableName + ".json");
  163. List<GroupConfig> groupConfigs = JSON.parseArray(json, GroupConfig.class);
  164. groupConfig = groupConfigs.stream().filter(item -> groupRequest.getGroupBy().equals(item.getField())).findFirst().orElse(null);
  165. if (groupConfig == null) {
  166. throw new XiaoShiException("未找到配置");
  167. }
  168. }
  169. tableName = "patent_project as pp left join project as p on pp.project_id = p.id ";
  170. tableName+= "left join (select * from asso_project_event where scenario_id is not null ) as asps on p.id = asps.project_id " +
  171. "left join (select * from asso_project_event where event_id is not null ) as aspe on p.id = aspe.project_id " +
  172. "left join (select * from asso_project_event where matter_id is not null ) as aspm on p.id = aspm.project_id";
  173. //返回分组数据
  174. QueryGroupImp queryGroupImp = queryGroupFactory.getClass(groupConfig.getGroupClass());
  175. String countFiled="distinct p.id";
  176. ReGroupDataVO reGroupDataVO = queryGroupImp.getGroup(sqls, tableName, groupConfig.getSqlField(),countFiled);
  177. //装载数据
  178. GroupVO groupVO = new GroupVO();
  179. groupVO.setField(groupRequest.getGroupBy());
  180. groupVO.setValues(reGroupDataVO.getValues());
  181. Records records = new Records();
  182. records.setCurrent(groupRequest.getCurrent());
  183. records.setSize(groupRequest.getSize());
  184. records.setData(groupVO);
  185. records.setTotal(reGroupDataVO.getTotal());
  186. return records;
  187. }
  188. /**
  189. * 添加
  190. *
  191. * @param object
  192. * @return
  193. */
  194. @Override
  195. @Transactional(rollbackFor = Exception.class)
  196. public Object addMessage(Object object) {
  197. if (object == null) {
  198. throw new XiaoShiException("参数不能为空");
  199. }
  200. //TODO 校验参数
  201. PatentProjectDTO patentProjectDTO = (PatentProjectDTO) object;
  202. //判断是否选择更新并且上传了cron表达式
  203. if (patentProjectDTO.getIfUpdate() != false) {
  204. if (patentProjectDTO.getCrons() == null && patentProjectDTO.getCrons().equals("")) {
  205. throw new XiaoShiException("选择更新,则cron表达式不能为空!");
  206. }
  207. }
  208. //校验必传参数是否上传
  209. if (patentProjectDTO.getHeadId() == null) {
  210. throw new XiaoShiException("负责人id不能为空");
  211. }
  212. //获取登陆人信息 用于设置创建人
  213. PersonnelVO personnelVO = new PersonnelVO();
  214. try {
  215. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  216. } catch (Exception e) {
  217. throw new UnLoginException("未登录");
  218. }
  219. /**
  220. * 装载project
  221. */
  222. Project project = new Project();
  223. BeanUtils.copyProperties(patentProjectDTO, project);
  224. //TODO 当委托方id或者委托方名称不为空时,
  225. if (patentProjectDTO.getEntrustId() != null || patentProjectDTO.getEntrustName() != null) {
  226. //根据创建人的租户类型设置project的委托类型
  227. if (personnelVO.getTenantType().equals("1")) {
  228. project.setEntrustType(1);
  229. //当委托方id不为空时
  230. if (patentProjectDTO.getEntrustId() != null) {
  231. project.setEntrustId(patentProjectDTO.getEntrustId());
  232. }
  233. //若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  234. else {
  235. ClientDTO clientDTO = new ClientDTO();
  236. clientDTO.setName(patentProjectDTO.getEntrustName());
  237. clientDTO.setTenantId(personnelVO.getTenantId());
  238. try {
  239. String res = permissionService.addClient(clientDTO);
  240. JSONObject jsonObject = JSONObject.parseObject(res);
  241. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  242. project.setEntrustId(clientId.toString());
  243. } catch (Exception e) {
  244. throw new XiaoShiException("网络异常");
  245. }
  246. }
  247. } else {
  248. if (patentProjectDTO.getEntrustId() != null) {
  249. project.setEntrustType(0);
  250. project.setEntrustId(patentProjectDTO.getEntrustId());
  251. }
  252. }
  253. }
  254. project.setCreateId(personnelVO.getId());
  255. project.setTenantId(personnelVO.getTenantId());
  256. project.setType(1);
  257. project.insert();
  258. /**
  259. * 装载patentProject
  260. */
  261. PatentProject patentProject = new PatentProject();
  262. BeanUtils.copyProperties(patentProjectDTO, patentProject);
  263. patentProject.setProjectId(project.getId());
  264. patentProject.insert();
  265. /**
  266. * 装载事件与project关联
  267. */
  268. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  269. List<ProjectEventDTO> events = patentProjectDTO.getEvents();
  270. if (events != null && events.size() != 0) {
  271. //遍历传入的事件集合
  272. for (ProjectEventDTO projectEventDTO : events) {
  273. AssoProjectEvent assoProjectEvent =assoProjectEvents.stream().filter(item->item.getEventId().equals(projectEventDTO.getEventId())).findFirst().orElse(null);
  274. AssoProjectEvent assoProjectEvent1 =assoProjectEvents.stream().filter(item->item.getScenarioId().equals(projectEventDTO.getScenarioId())).findFirst().orElse(null);
  275. AssoProjectEvent assoProjectEvent2 =assoProjectEvents.stream().filter(item->item.getMatterId().equals(projectEventDTO.getMatterId())).findFirst().orElse(null);
  276. if(assoProjectEvent==null) {
  277. assoProjectEvent = new AssoProjectEvent();
  278. //事件id和处理事项id
  279. assoProjectEvent.setEventId(projectEventDTO.getEventId());
  280. //项目id
  281. assoProjectEvent.setProjectId(project.getId());
  282. //创建人
  283. assoProjectEvent.setCreateId(personnelVO.getId());
  284. //类型为专题库
  285. assoProjectEvent.setProjectType(0);
  286. assoProjectEvents.add(assoProjectEvent);
  287. }
  288. if(assoProjectEvent1==null) {
  289. assoProjectEvent1 = new AssoProjectEvent();
  290. //事件id和处理事项id
  291. assoProjectEvent1.setScenarioId(projectEventDTO.getScenarioId());
  292. //项目id
  293. assoProjectEvent1.setProjectId(project.getId());
  294. //创建人
  295. assoProjectEvent1.setCreateId(personnelVO.getId());
  296. //类型为专题库
  297. assoProjectEvent1.setProjectType(0);
  298. assoProjectEvents.add(assoProjectEvent1);
  299. }
  300. if(assoProjectEvent2==null) {
  301. assoProjectEvent2 = new AssoProjectEvent();
  302. //事件id和处理事项id
  303. assoProjectEvent2.setScenarioId(projectEventDTO.getScenarioId());
  304. //项目id
  305. assoProjectEvent2.setProjectId(project.getId());
  306. //创建人
  307. assoProjectEvent2.setCreateId(personnelVO.getId());
  308. //类型为专题库
  309. assoProjectEvent2.setProjectType(0);
  310. assoProjectEvents.add(assoProjectEvent2);
  311. }
  312. }
  313. }
  314. //装载应用场景和project关联
  315. List<Integer> scenarios = patentProjectDTO.getScenarioIds();
  316. if (scenarios != null && scenarios.size() > 0) {
  317. for (Integer item : scenarios) {
  318. AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
  319. //项目id
  320. assoProjectEvent.setProjectId(project.getId());
  321. //创建人
  322. assoProjectEvent.setCreateId(personnelVO.getId());
  323. //类型为专题库
  324. assoProjectEvent.setProjectType(0);
  325. //装载场景id
  326. assoProjectEvent.setScenarioId(item);
  327. assoProjectEvents.add(assoProjectEvent);
  328. }
  329. }
  330. //装载应用场景和project关联
  331. List<Integer> matter = patentProjectDTO.getMatterIds();
  332. if (matter != null && matter.size() > 0) {
  333. for (Integer item : matter) {
  334. AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
  335. //项目id
  336. assoProjectEvent.setProjectId(project.getId());
  337. //创建人
  338. assoProjectEvent.setCreateId(personnelVO.getId());
  339. //类型为专题库
  340. assoProjectEvent.setProjectType(0);
  341. //装载处理事项id
  342. assoProjectEvent.setMatterId(item);
  343. assoProjectEvents.add(assoProjectEvent);
  344. }
  345. }
  346. //统一进行保存
  347. if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
  348. assoProjectEventService.saveBatch(assoProjectEvents);
  349. }
  350. /**
  351. * 装载树结构和project关联
  352. */
  353. List<AssoProjectTreeNode> assoProjectTreeNodes = new ArrayList<>();
  354. List<ProjectTreesDTO> trees = patentProjectDTO.getTrees();
  355. if (trees != null && trees.size() != 0) {
  356. //遍历传入的树
  357. for (ProjectTreesDTO projectTreesDTO : trees) {
  358. List<Integer> valueIds = projectTreesDTO.getValueIds();
  359. if(valueIds==null||valueIds.size()==0){
  360. valueIds = Arrays.asList(0);
  361. }
  362. //遍历值id集合
  363. for (Integer valueId : valueIds) {
  364. AssoProjectTreeNode assoProjectTreeNode = new AssoProjectTreeNode();
  365. BeanUtils.copyProperties(projectTreesDTO, assoProjectTreeNode);
  366. //专题库、报告id
  367. assoProjectTreeNode.setProjectId(project.getId());
  368. //值id
  369. assoProjectTreeNode.setValueId(valueId);
  370. assoProjectTreeNodes.add(assoProjectTreeNode);
  371. }
  372. }
  373. if (assoProjectTreeNodes != null && assoProjectTreeNodes.size() != 0) {
  374. assoProjectTreeNodeService.saveBatch(assoProjectTreeNodes);
  375. }
  376. }
  377. /**
  378. * 装载和附件关联
  379. */
  380. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  381. List<String> fileGuids = patentProjectDTO.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. return project.getId();
  395. }
  396. @Override
  397. public Object updateMessage(Object object) {
  398. if (object == null) {
  399. throw new XiaoShiException("参数不能为空");
  400. }
  401. //TODO 校验参数
  402. UpdatePatentProjectDTO updatePatentProjectDTO = (UpdatePatentProjectDTO) object;
  403. //判断是否选择更新并且上传了cron表达式
  404. if (updatePatentProjectDTO.getIfUpdate() != false) {
  405. if (updatePatentProjectDTO.getCrons() == null && updatePatentProjectDTO.getCrons().equals("")) {
  406. throw new XiaoShiException("选择更新,则cron表达式不能为空!");
  407. }
  408. }
  409. //校验必传参数是否上传
  410. if (updatePatentProjectDTO.getHeadId() == null) {
  411. throw new XiaoShiException("负责人id不能为空");
  412. }
  413. //获取登陆人信息 用于设置创建人
  414. PersonnelVO personnelVO = new PersonnelVO();
  415. try {
  416. personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  417. } catch (Exception e) {
  418. throw new UnLoginException("未登录");
  419. }
  420. //TODO 更新基本信息
  421. //根据传入对象id查询project对象
  422. Project project = projectService.getById(updatePatentProjectDTO.getId());
  423. BeanUtils.copyProperties(updatePatentProjectDTO, project);
  424. //TODO 当委托方id或者委托方名称不为空时,
  425. if (updatePatentProjectDTO.getEntrustId() != null || updatePatentProjectDTO.getEntrustName() != null) {
  426. //根据创建人的租户类型设置project的委托类型
  427. if (personnelVO.getTenantType().equals("1")) {
  428. project.setEntrustType(1);
  429. //当委托方id不为空时
  430. if (updatePatentProjectDTO.getEntrustId() != null) {
  431. project.setEntrustId(updatePatentProjectDTO.getEntrustId());
  432. }
  433. //若且租户类型为代理机构,并且委托方id为空,委托方名称不为空时,新增委托方
  434. else {
  435. ClientDTO clientDTO = new ClientDTO();
  436. clientDTO.setName(updatePatentProjectDTO.getEntrustName());
  437. clientDTO.setTenantId(personnelVO.getTenantId());
  438. try {
  439. String res = permissionService.addClient(clientDTO);
  440. JSONObject jsonObject = JSONObject.parseObject(res);
  441. Integer clientId = Integer.parseInt(jsonObject.get("data").toString());
  442. project.setEntrustId(clientId.toString());
  443. } catch (Exception e) {
  444. throw new XiaoShiException("网络异常");
  445. }
  446. }
  447. } else {
  448. if (updatePatentProjectDTO.getEntrustId() != null) {
  449. project.setEntrustType(0);
  450. project.setEntrustId(updatePatentProjectDTO.getEntrustId());
  451. }
  452. }
  453. }
  454. project.updateById();
  455. /**
  456. * 装载patentProject
  457. */
  458. //根据projectId查询出patentProject
  459. LambdaQueryWrapper<PatentProject> queryWrapper = new LambdaQueryWrapper<>();
  460. queryWrapper.eq(PatentProject::getProjectId, project.getId());
  461. PatentProject patentProject = this.list(queryWrapper).get(0);
  462. //装载数据
  463. patentProject.setIfUpdate(updatePatentProjectDTO.getIfUpdate());
  464. patentProject.setStatus(updatePatentProjectDTO.getStatus());
  465. patentProject.setCrons(updatePatentProjectDTO.getCrons());
  466. patentProject.updateById();
  467. //TODO 更新场景
  468. //TODO 更新事件
  469. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  470. LambdaQueryWrapper<AssoProjectEvent> updateEventWrapper = new LambdaQueryWrapper<>();
  471. updateEventWrapper.eq(AssoProjectEvent::getProjectId, project.getId());
  472. assoProjectEventService.remove(updateEventWrapper);
  473. List<ProjectEventDTO> events = updatePatentProjectDTO.getEvents();
  474. if (events != null && events.size() != 0) {
  475. for (ProjectEventDTO projectEventDTO : events) {
  476. AssoProjectEvent assoProjectEvent =assoProjectEvents.stream().filter(item->item.getEventId().equals(projectEventDTO.getEventId())).findFirst().orElse(null);
  477. AssoProjectEvent assoProjectEvent1 =assoProjectEvents.stream().filter(item->item.getScenarioId().equals(projectEventDTO.getScenarioId())).findFirst().orElse(null);
  478. AssoProjectEvent assoProjectEvent2 =assoProjectEvents.stream().filter(item->item.getMatterId().equals(projectEventDTO.getMatterId())).findFirst().orElse(null);
  479. if(assoProjectEvent==null) {
  480. assoProjectEvent = new AssoProjectEvent();
  481. //事件id和处理事项id
  482. assoProjectEvent.setEventId(projectEventDTO.getEventId());
  483. //项目id
  484. assoProjectEvent.setProjectId(project.getId());
  485. //创建人
  486. assoProjectEvent.setCreateId(personnelVO.getId());
  487. //类型为专题库
  488. assoProjectEvent.setProjectType(0);
  489. assoProjectEvents.add(assoProjectEvent);
  490. }
  491. if(assoProjectEvent1==null) {
  492. assoProjectEvent1 = new AssoProjectEvent();
  493. //事件id和处理事项id
  494. assoProjectEvent1.setScenarioId(projectEventDTO.getScenarioId());
  495. //项目id
  496. assoProjectEvent1.setProjectId(project.getId());
  497. //创建人
  498. assoProjectEvent1.setCreateId(personnelVO.getId());
  499. //类型为专题库
  500. assoProjectEvent1.setProjectType(0);
  501. assoProjectEvents.add(assoProjectEvent1);
  502. }
  503. if(assoProjectEvent2==null) {
  504. assoProjectEvent2 = new AssoProjectEvent();
  505. //事件id和处理事项id
  506. assoProjectEvent2.setScenarioId(projectEventDTO.getScenarioId());
  507. //项目id
  508. assoProjectEvent2.setProjectId(project.getId());
  509. //创建人
  510. assoProjectEvent2.setCreateId(personnelVO.getId());
  511. //类型为专题库
  512. assoProjectEvent2.setProjectType(0);
  513. assoProjectEvents.add(assoProjectEvent2);
  514. }
  515. }
  516. }
  517. //装载应用场景和project关联
  518. List<Integer> scenarios = updatePatentProjectDTO.getScenarioIds();
  519. if (scenarios != null && scenarios.size() > 0) {
  520. for (Integer item : scenarios) {
  521. AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
  522. //项目id
  523. assoProjectEvent.setProjectId(project.getId());
  524. //创建人
  525. assoProjectEvent.setCreateId(personnelVO.getId());
  526. //类型为专题库
  527. assoProjectEvent.setProjectType(0);
  528. //装载场景id
  529. assoProjectEvent.setScenarioId(item);
  530. assoProjectEvents.add(assoProjectEvent);
  531. }
  532. }
  533. //装载处理事项和project关联
  534. List<Integer> matter = updatePatentProjectDTO.getMatterIds();
  535. if (matter != null && matter.size() > 0) {
  536. for (Integer item : matter) {
  537. AssoProjectEvent assoProjectEvent = new AssoProjectEvent();
  538. //项目id
  539. assoProjectEvent.setProjectId(project.getId());
  540. //创建人
  541. assoProjectEvent.setCreateId(personnelVO.getId());
  542. //类型为专题库
  543. assoProjectEvent.setProjectType(0);
  544. //装载处理事项id
  545. assoProjectEvent.setMatterId(item);
  546. assoProjectEvents.add(assoProjectEvent);
  547. }
  548. }
  549. //统一进行保存
  550. if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
  551. assoProjectEventService.saveBatch(assoProjectEvents);
  552. }
  553. /**
  554. * 装载树结构和project关联
  555. */
  556. List<AssoProjectTreeNode> assoProjectTreeNodes = new ArrayList<>();
  557. LambdaQueryWrapper<AssoProjectTreeNode> updateTreeWrapper = new LambdaQueryWrapper<>();
  558. updateTreeWrapper.eq(AssoProjectTreeNode::getProjectId, project.getId());
  559. assoProjectTreeNodeService.remove(updateTreeWrapper);
  560. List<ProjectTreesDTO> trees = updatePatentProjectDTO.getTrees();
  561. if (trees != null && trees.size() != 0) {
  562. //遍历传入的树
  563. for (ProjectTreesDTO projectTreesDTO : trees) {
  564. List<Integer> valueIds = projectTreesDTO.getValueIds();
  565. if(valueIds==null||valueIds.size()==0){
  566. valueIds = Arrays.asList(0);
  567. }
  568. //遍历值id集合
  569. for (Integer valueId : valueIds) {
  570. AssoProjectTreeNode assoProjectTreeNode = new AssoProjectTreeNode();
  571. BeanUtils.copyProperties(projectTreesDTO, assoProjectTreeNode);
  572. //专题库、报告id
  573. assoProjectTreeNode.setProjectId(project.getId());
  574. //值id
  575. assoProjectTreeNode.setValueId(valueId);
  576. assoProjectTreeNodes.add(assoProjectTreeNode);
  577. }
  578. }
  579. if (assoProjectTreeNodes != null && assoProjectTreeNodes.size() != 0) {
  580. assoProjectTreeNodeService.saveBatch(assoProjectTreeNodes);
  581. }
  582. }
  583. //TODO 若产品或产品类别技术类别有更新,则删除产品或产品类别技术类别和专利的标引(只需判断,删除部分,待es完成)
  584. //TODO 更新关联附件
  585. /**
  586. * 装载和附件关联
  587. */
  588. List<AssoProjectFile> assoProjectFiles = new ArrayList<>();
  589. LambdaQueryWrapper<AssoProjectFile> updateFileWrapper = new LambdaQueryWrapper<>();
  590. updateFileWrapper.eq(AssoProjectFile::getProjectId, project.getId());
  591. assoProjectFileService.remove(updateFileWrapper);
  592. List<String> fileGuids = updatePatentProjectDTO.getFileGuids();
  593. if (fileGuids != null && fileGuids.size() != 0) {
  594. for (String fileGuid : fileGuids) {
  595. AssoProjectFile assoProjectFile = new AssoProjectFile();
  596. assoProjectFile.setProjectId(project.getId());
  597. assoProjectFile.setFileGuid(fileGuid);
  598. assoProjectFile.setCreateId(personnelVO.getId());
  599. assoProjectFiles.add(assoProjectFile);
  600. }
  601. if (assoProjectFiles != null && assoProjectFiles.size() != 0) {
  602. assoProjectFileService.saveBatch(assoProjectFiles);
  603. }
  604. }
  605. return project.getId();
  606. }
  607. /**
  608. * @param patentProjectVOS
  609. * @throws IOException
  610. */
  611. private void loadPatentProject(List<PatentProjectVO> patentProjectVOS) throws IOException {
  612. List<String> createIds = new ArrayList<>();
  613. List<String> departmentIds = new ArrayList<>();
  614. List<Integer> clientIds = new ArrayList<>();
  615. List<Integer> ids = new ArrayList<>();
  616. List<DepartmentVO> departmentVOS = new ArrayList<>();
  617. List<ReportCountVO> reportCountVOS = new ArrayList<>();
  618. List<Client> clients = new ArrayList<>();
  619. List<AssoProjectEvent> assoProjectEvents = new ArrayList<>();
  620. List<AssoProjectTreeNode> assoProjectTreeNodes = new ArrayList<>();
  621. List<Event> events = new ArrayList<>();
  622. List<Scenario> scenarios = new ArrayList<>();
  623. List<Matter> matters = new ArrayList<>();
  624. List<Product> products = new ArrayList<>();
  625. List<ProductCategory> productCategories = new ArrayList<>();
  626. //TODO 技术分类
  627. //获得创建人id集合
  628. patentProjectVOS.forEach(
  629. item -> {
  630. if (item.getCreateId() != null) {
  631. createIds.add(item.getCreateId());
  632. }
  633. if (item.getHeadId() != null) {
  634. createIds.add(item.getHeadId());
  635. }
  636. if (item.getId() != null) {
  637. ids.add(item.getId());
  638. }
  639. if (item.getDepartmentId() != null) {
  640. departmentIds.add(item.getDepartmentId());
  641. }
  642. if (item.getEntrustType() != null && item.getEntrustType().equals(2)) {
  643. departmentIds.add(item.getEntrustId());
  644. }
  645. if (item.getEntrustType() != null && item.getEntrustType().equals(1)) {
  646. clientIds.add(Integer.parseInt(item.getEntrustId()));
  647. }
  648. }
  649. );
  650. List<Personnel> personnels = new ArrayList<>();
  651. List<String> guids = new ArrayList<>();
  652. List<SystemFile> systemFiles = new ArrayList<>();
  653. List<AssoProjectFile> assoEventFiles = new ArrayList<>();
  654. //查询创建人名称
  655. if (createIds.size() != 0) {
  656. String res = permissionService.getPersonnelByIdsFromPCS(createIds);
  657. JSONObject jsonObject = JSONObject.parseObject(res);
  658. personnels = JSONObject.parseArray(jsonObject.getString("data"), Personnel.class);
  659. }
  660. //查询部门名称
  661. if (departmentIds.size() != 0) {
  662. String json = permissionService.getDepartmentByIdsFromPCS(departmentIds);
  663. departmentVOS = JSON.parseArray(json, DepartmentVO.class);
  664. }
  665. if (ids.size() != 0) {
  666. //根据事件id获得专利数据库文件关联表
  667. LambdaQueryWrapper<AssoProjectFile> queryWrapper = new LambdaQueryWrapper<>();
  668. queryWrapper.in(AssoProjectFile::getProjectId, ids);
  669. assoEventFiles = assoProjectFileService.list(queryWrapper);
  670. guids = assoEventFiles.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
  671. //根据事件id分组查询事件关联专题库或报告数量
  672. reportCountVOS = assoProjectService.getBaseMapper().getReportCount(ids);
  673. }
  674. //查询文件
  675. if (guids.size() != 0) {
  676. String res = fileManagerService.getSystemFileFromFMS(guids);
  677. systemFiles = JSONObject.parseArray(res, SystemFile.class);
  678. }
  679. //查询客户名称
  680. if (clientIds.size() != 0) {
  681. String res = permissionService.getClientByIdsFromPCS(clientIds);
  682. JSONObject jsonObject = JSONObject.parseObject(res);
  683. clients = JSONObject.parseArray(jsonObject.getString("data"), Client.class);
  684. }
  685. //查询应用场景、调查类型、事件和专题库的关联
  686. if (ids != null && ids.size() > 0) {
  687. LambdaQueryWrapper<AssoProjectEvent> assoProjectEventQueryWrapper = new LambdaQueryWrapper<>();
  688. assoProjectEventQueryWrapper.in(AssoProjectEvent::getProjectId, ids);
  689. assoProjectEvents = assoProjectEventService.list(assoProjectEventQueryWrapper);
  690. //查询事件
  691. if (assoProjectEvents != null && assoProjectEvents.size() != 0) {
  692. scenarios = scenarioService.list();
  693. matters = matterService.list();
  694. List<Integer> eventIds = assoProjectEvents.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
  695. if (eventIds.size() != 0) {
  696. LambdaQueryWrapper<Event> eventQueryWrapper = new LambdaQueryWrapper<>();
  697. eventQueryWrapper.in(Event::getId, eventIds);
  698. events = eventService.list(eventQueryWrapper);
  699. }
  700. }
  701. }
  702. //查询和产品,产品分类,技术分类关联列表
  703. if (ids != null && ids.size() > 0) {
  704. LambdaQueryWrapper<AssoProjectTreeNode> assoProjectTreeNodeQueryWrapper = new LambdaQueryWrapper<>();
  705. assoProjectTreeNodeQueryWrapper.in(AssoProjectTreeNode::getProjectId, ids);
  706. assoProjectTreeNodes = assoProjectTreeNodeService.list(assoProjectTreeNodeQueryWrapper);
  707. if (assoProjectTreeNodes != null && assoProjectTreeNodes.size() > 0) {
  708. List<Integer> productIds = assoProjectTreeNodes.stream().filter(item -> item.getTreeType().equals(2)).map(AssoProjectTreeNode::getFieldId).collect(Collectors.toList());
  709. if (productIds.size() != 0) {
  710. LambdaQueryWrapper<Product> productQueryWrapper = new LambdaQueryWrapper<>();
  711. productQueryWrapper.in(Product::getId, productIds);
  712. products = productService.list(productQueryWrapper);
  713. }
  714. List<Integer> productCategoryIds = assoProjectTreeNodes.stream().filter(item -> item.getTreeType().equals(3)).map(AssoProjectTreeNode::getFieldId).collect(Collectors.toList());
  715. if (productCategoryIds.size() != 0) {
  716. LambdaQueryWrapper<ProductCategory> productCategoryQueryWrapper = new LambdaQueryWrapper<>();
  717. productCategoryQueryWrapper.in(ProductCategory::getId, productCategoryIds);
  718. productCategories = productCategoryService.list(productCategoryQueryWrapper);
  719. }
  720. }
  721. }
  722. //装载信息
  723. for (PatentProjectVO patentProjectVO : patentProjectVOS) {
  724. //装载人员信息
  725. Personnel personnel = personnels.stream().filter(item -> item.getId().equals(patentProjectVO.getCreateId())).findFirst().orElse(null);
  726. if (personnel != null) {
  727. patentProjectVO.setCreateName(personnel.getPersonnelName());
  728. }
  729. if (patentProjectVO.getHeadId() != null) {
  730. Personnel headPersonnel = personnels.stream().filter(item -> item.getId().equals(patentProjectVO.getHeadId())).findFirst().orElse(null);
  731. if (headPersonnel != null) {
  732. patentProjectVO.setHeadName(headPersonnel.getPersonnelName());
  733. }
  734. }
  735. //装载文件信息
  736. List<AssoProjectFile> assoProjectFileTemp = assoEventFiles.stream().filter(item -> item.getProjectId().equals(patentProjectVO.getId())).collect(Collectors.toList());
  737. if (assoProjectFileTemp.size() != 0) {
  738. List<String> guidTemp = assoProjectFileTemp.stream().map(AssoProjectFile::getFileGuid).collect(Collectors.toList());
  739. if (guidTemp.size() != 0) {
  740. List<SystemFile> systemFileTemp = systemFiles.stream().filter(item -> guidTemp.contains(item.getGuid())).collect(Collectors.toList());
  741. if (systemFileTemp.size() != 0) {
  742. patentProjectVO.setSystemFileList(systemFileTemp);
  743. }
  744. }
  745. }
  746. //装载报告数量
  747. if (reportCountVOS.size() != 0) {
  748. //报告数量
  749. ReportCountVO reportCountVO = reportCountVOS.stream().filter(item ->
  750. item.getProjectId().equals(patentProjectVO.getId())).findFirst().orElse(null);
  751. //设置报告数量
  752. if (reportCountVO != null) {
  753. patentProjectVO.setReportProjectNum(reportCountVO.getProjectCount());
  754. } else {
  755. patentProjectVO.setReportProjectNum(0);
  756. }
  757. } else {
  758. patentProjectVO.setReportProjectNum(0);
  759. }
  760. //装载部门
  761. if (patentProjectVO.getDepartmentId() != null) {
  762. DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(patentProjectVO.getDepartmentId())).findFirst().orElse(null);
  763. if (departmentVO != null) {
  764. patentProjectVO.setDepartmentName(departmentVO.getDepartName());
  765. }
  766. }
  767. //裝載委托方
  768. if (patentProjectVO.getEntrustType() != null) {
  769. //当委托方为客户时
  770. if (patentProjectVO.getEntrustType().equals(1)) {
  771. Client client = clients.stream().filter(item -> item.getId().equals(Integer.parseInt(patentProjectVO.getEntrustId()))).findFirst().orElse(null);
  772. if (client != null) {
  773. patentProjectVO.setEntrustName(client.getName());
  774. }
  775. } else if (patentProjectVO.getEntrustType().equals(2)) {
  776. DepartmentVO departmentVO = departmentVOS.stream().filter(item -> item.getDepartId().equals(patentProjectVO.getEntrustId())).findFirst().orElse(null);
  777. if (departmentVO != null) {
  778. patentProjectVO.setEntrustName(departmentVO.getDepartName());
  779. }
  780. }
  781. }
  782. //装载事件 应用场景,处理事项
  783. List<Integer> eventIds = new ArrayList<>();
  784. List<Integer> matterIds = new ArrayList<>();
  785. List<Integer> scenarioIds = new ArrayList<>();
  786. List<String> eventTmpNames = new ArrayList<>();
  787. List<String> matterTmpNames = new ArrayList<>();
  788. List<String> scenarioTmpNames = new ArrayList<>();
  789. if (assoProjectEvents != null) {
  790. List<AssoProjectEvent> assoProjectEventTmps = assoProjectEvents.stream().filter(item -> item.getProjectId().equals(patentProjectVO.getId())).collect(Collectors.toList());
  791. if (assoProjectEventTmps.size() != 0) {
  792. //过滤出事件
  793. eventIds = assoProjectEventTmps.stream().filter(item -> item.getEventId() != null).map(AssoProjectEvent::getEventId).collect(Collectors.toList());
  794. matterIds = assoProjectEventTmps.stream().filter(item -> item.getMatterId() != null).map(AssoProjectEvent::getMatterId).collect(Collectors.toList());
  795. scenarioIds = assoProjectEventTmps.stream().filter(item -> item.getScenarioId() != null).map(AssoProjectEvent::getScenarioId).collect(Collectors.toList());
  796. List<Integer> eventIdsFilter = eventIds;
  797. List<Integer> matterIdsFilter = matterIds;
  798. List<Integer> scenarioIdsFilter = scenarioIds;
  799. List<Event> eventTmps = events.stream().filter(item -> eventIdsFilter.contains(item.getId())).collect(Collectors.toList());
  800. List<Matter> matterTmps = matters.stream().filter(item -> matterIdsFilter.contains(item.getId())).collect(Collectors.toList());
  801. List<Scenario> scenarioTmps = scenarios.stream().filter(item -> scenarioIdsFilter.contains(item.getId())).collect(Collectors.toList());
  802. eventTmpNames = eventTmps.stream().map(Event::getName).collect(Collectors.toList());
  803. eventIds = eventTmps.stream().map(Event::getId).collect(Collectors.toList());
  804. matterTmpNames = matterTmps.stream().map(Matter::getName).collect(Collectors.toList());
  805. matterIds = matterTmps.stream().map(Matter::getId).collect(Collectors.toList());
  806. scenarioTmpNames = scenarioTmps.stream().map(Scenario::getName).collect(Collectors.toList());
  807. scenarioIds = scenarioTmps.stream().map(Scenario::getId).collect(Collectors.toList());
  808. }
  809. }
  810. patentProjectVO.setScenarioIds(scenarioIds);
  811. patentProjectVO.setMatterIds(matterIds);
  812. patentProjectVO.setEventIds(eventIds);
  813. patentProjectVO.setScenarioNames(scenarioTmpNames);
  814. patentProjectVO.setMatterNames(matterTmpNames);
  815. patentProjectVO.setEventNames(eventTmpNames);
  816. //装载产品,产品分类,技术分类
  817. if (assoProjectTreeNodes != null) {
  818. AssoProjectTreeNode assoProjectTreeNode = assoProjectTreeNodes.stream().filter(item -> item.getProjectId().equals(patentProjectVO.getId()) && (item.getTreeType().equals(2) || item.getTreeType().equals(3))).
  819. findFirst().orElse(null);
  820. if (assoProjectTreeNode != null) {
  821. ProductOrCategoryVO productOrCategoryVO = new ProductOrCategoryVO();
  822. productOrCategoryVO.setValueIds(Arrays.asList(assoProjectTreeNode.getValueId()));
  823. if (assoProjectTreeNode.getTreeType().equals(2)) {
  824. Product product = products.stream().filter(item -> item.getId().equals(assoProjectTreeNode.getFieldId())).findFirst().orElse(null);
  825. if (product != null) {
  826. productOrCategoryVO.setName(product.getName());
  827. productOrCategoryVO.setId(product.getId());
  828. productOrCategoryVO.setType(2);
  829. patentProjectVO.setProductOrCategory(productOrCategoryVO);
  830. }
  831. } else if (assoProjectTreeNode.getTreeType().equals(3)) {
  832. ProductCategory productCategory = productCategories.stream().filter(item -> item.getId().equals(assoProjectTreeNode.getFieldId())).findFirst().orElse(null);
  833. if (productCategory != null) {
  834. productOrCategoryVO.setName(productCategory.getName());
  835. productOrCategoryVO.setId(productCategory.getId());
  836. productOrCategoryVO.setType(3);
  837. patentProjectVO.setProductOrCategory(productOrCategoryVO);
  838. }
  839. }
  840. }
  841. }
  842. }
  843. }
  844. //装载查询语句
  845. private List<String> loadSearchSql(List<String> sqls){
  846. PersonnelVO personnelVO =cacheUtils.getLoginUser(loginUtils.getId());
  847. String id =personnelVO.getId();
  848. Integer tenantId= personnelVO.getTenantId();
  849. Integer roleType = personnelVO.getRoleType();
  850. String rootSql = "";
  851. if (roleType == null || roleType.equals(0)) {
  852. 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+"))";
  853. }
  854. else if(roleType.equals(2))
  855. {
  856. rootSql="(p.tenant_id="+tenantId+" or p.id in (select project_id from asso_project_person where person_id ="+id+"))";
  857. }
  858. if (sqls.get(0) != null && !sqls.get(0).equals("") && !rootSql.equals("")) {
  859. sqls.set(0, rootSql + " and" + "(" + sqls.get(0) + ")");
  860. } else if ((sqls.get(0) == null || sqls.get(0).equals("")) && !rootSql.equals("")) {
  861. sqls.set(0, rootSql);
  862. }
  863. return sqls;
  864. }
  865. }