PatentProjectService.java 49 KB

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