GcNoticeandfileSchedul.java 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453
  1. package com.trs.ggzyexchange.schedul;
  2. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  5. import com.fasterxml.jackson.core.JsonProcessingException;
  6. import com.trs.ggzyexchange.entity.*;
  7. import com.trs.ggzyexchange.enums.BulletinType;
  8. import com.trs.ggzyexchange.enums.ClassIfy;
  9. import com.trs.ggzyexchange.enums.JobLock;
  10. import com.trs.ggzyexchange.service.*;
  11. import com.trs.ggzyexchange.utils.TenderDetailsVoUtils;
  12. import org.apache.commons.lang3.ObjectUtils;
  13. import org.apache.commons.lang3.StringEscapeUtils;
  14. import org.quartz.Job;
  15. import org.quartz.JobExecutionContext;
  16. import org.quartz.JobExecutionException;
  17. import org.slf4j.Logger;
  18. import org.slf4j.LoggerFactory;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.scheduling.annotation.Scheduled;
  21. import org.springframework.stereotype.Component;
  22. import org.springframework.util.CollectionUtils;
  23. import java.text.SimpleDateFormat;
  24. import java.util.ArrayList;
  25. import java.util.Date;
  26. import java.util.List;
  27. /**
  28. * <p>
  29. * 招标公告与资格预审公告 定时任务
  30. * </p>
  31. * bid_finish_time
  32. * @author trs
  33. * @since 2023-02-16
  34. */
  35. @Component
  36. public class GcNoticeandfileSchedul implements Job {
  37. private Logger logger = LoggerFactory.getLogger(GcNoticeandfileSchedul.class);
  38. @Autowired
  39. private GcNoticeandfileService gcNoticeandfileService;
  40. @Autowired
  41. private TRegionService tRegionService;
  42. @Autowired
  43. private AreaPlatformService areaPlatformService;
  44. @Autowired
  45. private GcTenderbidfileService gcTenderbidfileService;
  46. @Autowired
  47. private GcBidopenrecordService gcBidopenrecordService;
  48. @Autowired
  49. private CIndustriesTypeService cIndustriesTypeService;
  50. @Autowired
  51. private ScheduledTashService scheduledTashService;
  52. @Autowired
  53. private GcAttachmentService gcAttachmentService;
  54. public void queryPageListUpdateEs() throws JsonProcessingException {
  55. /**
  56. * 查询当前在定时任务表当中的最新时间
  57. */
  58. QueryWrapper<ScheduledTash> scheduledTashQueryWrapper = new QueryWrapper<ScheduledTash>();
  59. scheduledTashQueryWrapper.eq("table_name_value","gc_noticeandfile");
  60. Page<ScheduledTash> pageScheduledTash = new Page<ScheduledTash>(1, 1);
  61. Page<ScheduledTash> page = scheduledTashService.page(pageScheduledTash, scheduledTashQueryWrapper);
  62. List<ScheduledTash> records = page.getRecords();
  63. ScheduledTash scheduledTash = null;
  64. if(!ObjectUtils.isEmpty(page)){
  65. if(!ObjectUtils.isEmpty(records)){
  66. if(records.size() > 0){
  67. scheduledTash = records.get(0);
  68. }
  69. }
  70. }
  71. Long time = null;
  72. if(ObjectUtils.isEmpty(scheduledTash)){
  73. try {
  74. /**
  75. * 如果scheduledTash为空,证明没有当前定时任务,设置当前的定时任务的时间为0 查询表gcNoticeandfile表当中的最新时间
  76. */
  77. time = gcNoticeandfileService.maxDataTimeStamp();
  78. ScheduledTash scheduledTashTash = new ScheduledTash();
  79. scheduledTashTash.setTime(0L);
  80. time = 0L;
  81. scheduledTashTash.setTableNameValue("gc_noticeandfile");
  82. scheduledTashTash.setUpdateTime(new Date());
  83. scheduledTashTash.setCreateTime(new Date());
  84. scheduledTashService.saveOrUpdate(scheduledTashTash,scheduledTashQueryWrapper);
  85. }catch (Exception e){
  86. e.printStackTrace();
  87. }
  88. }else {
  89. /**
  90. * 如果scheduledTash为空,证明没有当前定时任务,设置当前的定时任务的时间为0 查询表gcNoticeandfile表当中的最新时间
  91. */
  92. time = scheduledTash.getTime();
  93. }
  94. try {
  95. //查询表gcNoticeandfile表当中的最新时间
  96. Long newTime = gcNoticeandfileService.maxDataTimeStamp();
  97. ScheduledTash scheduledTashTash = new ScheduledTash();
  98. scheduledTashTash.setTime(newTime);
  99. scheduledTashTash.setTableNameValue("gc_noticeandfile");
  100. scheduledTashTash.setUpdateTime(new Date());
  101. scheduledTashService.saveOrUpdate(scheduledTashTash,scheduledTashQueryWrapper);
  102. }catch (Exception e){
  103. e.printStackTrace();
  104. }
  105. if(!ObjectUtils.isEmpty(time)){
  106. try {
  107. QueryWrapper<GcNoticeandfile> noticeandfileQueryWrapper = new QueryWrapper<GcNoticeandfile>();
  108. noticeandfileQueryWrapper.gt("DATA_TIMESTAMP",time);
  109. int count = gcNoticeandfileService.count(noticeandfileQueryWrapper);
  110. Integer pageSize = 1000;
  111. Integer pageNum = (int)Math.ceil((double)count/pageSize);
  112. for(int i = 1; i <= pageNum;i++){
  113. try {
  114. List<TenderDetailsVo> tenderDetailsVoListAll = getTenderDetailsVoListAll(i, pageSize,time);
  115. gcNoticeandfileService.parseTenderDetailsVo(tenderDetailsVoListAll);
  116. }catch (Exception e){
  117. e.printStackTrace();
  118. }
  119. }
  120. }catch (Exception e){
  121. e.printStackTrace();
  122. }
  123. }
  124. }
  125. public List<TenderDetailsVo> getTenderDetailsVoListAll(Integer pageNo,Integer pageSize, Long time){
  126. GcNoticeandfile gcNoticeandfile = new GcNoticeandfile();
  127. Page<GcNoticeandfile> page = new Page<GcNoticeandfile>(pageNo, pageSize);
  128. IPage<TenderDetailsVo> pageList = gcNoticeandfileService.queryGcTenderProjectAllListGeTime(page, gcNoticeandfile,time);
  129. for (TenderDetailsVo record : pageList.getRecords()) {
  130. if(!ObjectUtils.isEmpty(record)){
  131. String escaped = StringEscapeUtils.unescapeHtml3(record.getNoticeContent());
  132. if(!ObjectUtils.isEmpty(escaped)){
  133. record.setNoticeContent(escaped);
  134. }
  135. //获取国标区域名称
  136. QueryWrapper<TRegion> tRegionQueryWrapper = new QueryWrapper<TRegion>();
  137. String TregionCode = record.getRegionCode();
  138. Page<TRegion> pageTRegion = new Page<TRegion>(1, 1);
  139. if(!ObjectUtils.isEmpty(TregionCode)){
  140. tRegionQueryWrapper.eq("code",TregionCode+"000000");
  141. List<TRegion> records = tRegionService.page(pageTRegion, tRegionQueryWrapper).getRecords();
  142. if(records.size() >= 1){
  143. try {
  144. String name = records.get(0).getName();
  145. if(!ObjectUtils.isEmpty(name)){
  146. record.setRegionName(name);
  147. }
  148. }catch (Exception e){
  149. e.printStackTrace();
  150. }
  151. }
  152. }
  153. //获取区域编号
  154. String areaPlatformCode = record.getPlatformCode();
  155. if(!ObjectUtils.isEmpty(areaPlatformCode)){
  156. if("12152900085184725H".equals(areaPlatformCode))areaPlatformCode="152901";
  157. QueryWrapper<AreaPlatform> areaPlatformQueryWrapper = new QueryWrapper<AreaPlatform>();
  158. Page<AreaPlatform> areaPlatformPage = new Page<AreaPlatform>(1, 1);
  159. areaPlatformQueryWrapper.eq("PLATFORM_CODE",areaPlatformCode);
  160. List<AreaPlatform> recordsAreaPlatform = areaPlatformService.page(areaPlatformPage, areaPlatformQueryWrapper).getRecords();
  161. if(recordsAreaPlatform.size() >= 1){
  162. try {
  163. String regionName = recordsAreaPlatform.get(0).getRegionName();
  164. if(!ObjectUtils.isEmpty(regionName)){
  165. record.setPlatformName(regionName);
  166. }
  167. }catch (Exception e){
  168. e.printStackTrace();
  169. }
  170. }
  171. }
  172. //电力交易
  173. if(!ObjectUtils.isEmpty(record.getSourceDataCode()) && "7089bc24".equals(record.getSourceDataCode())) {
  174. record.setTransactionTypeCode(ClassIfy.ELECTRICITY.getCode());
  175. record.setTransactionTypeName(ClassIfy.ELECTRICITY.getName());
  176. }else if(!ObjectUtils.isEmpty(record.getSourceDataCode()) && "d844782a".equals(record.getSourceDataCode())) {
  177. record.setTransactionTypeCode(ClassIfy.WEITUO.getCode());
  178. record.setTransactionTypeName(ClassIfy.WEITUO.getName());
  179. }else {
  180. record.setTransactionTypeCode(ClassIfy.ENGINEERING_CONSTRUCTION.getCode());
  181. record.setTransactionTypeName(ClassIfy.ENGINEERING_CONSTRUCTION.getName());
  182. }
  183. //获取行业信息代码
  184. String industriesTypeCode = record.getIndustriesTypeCode();
  185. if(!ObjectUtils.isEmpty(industriesTypeCode)){
  186. try {
  187. QueryWrapper<CIndustriesType> cIndustriesTypeQueryWrapper = new QueryWrapper<CIndustriesType>();
  188. cIndustriesTypeQueryWrapper.eq("code",industriesTypeCode);
  189. CIndustriesType cIndustriesType = cIndustriesTypeService.getOne(cIndustriesTypeQueryWrapper);
  190. if(!ObjectUtils.isEmpty(cIndustriesType)){
  191. String name = cIndustriesType.getName();
  192. record.setIndustriesTypeName(name);
  193. }
  194. }catch (Exception e){
  195. e.printStackTrace();
  196. }
  197. }
  198. record.setNoticeTypeCode(ClassIfy.TENDER_ANNOUNCEMENT.getCode());
  199. record.setNoticeTypeName(ClassIfy.TENDER_ANNOUNCEMENT.getName());
  200. String bulletinTypeCode = record.getBulletinTypeCode();
  201. if(!ObjectUtils.isEmpty(bulletinTypeCode)){
  202. try {
  203. String bulletinTypeName = BulletinType.getBulletinTypeName(bulletinTypeCode);
  204. if(!ObjectUtils.isEmpty(bulletinTypeName)){
  205. record.setBulletinTypeName(bulletinTypeName);
  206. }
  207. }catch (Exception e){
  208. e.printStackTrace();
  209. }
  210. }
  211. String dataSourceCode = record.getDataSourceCode();
  212. if(!ObjectUtils.isEmpty(dataSourceCode)){
  213. QueryWrapper<TRegion> tRegionQueryWrapperQ = new QueryWrapper<TRegion>();
  214. String subSourceCode = dataSourceCode.substring(1, dataSourceCode.length());
  215. tRegionQueryWrapperQ.eq("code",subSourceCode+"000000");
  216. List<TRegion> tRegionList = tRegionService.page(pageTRegion, tRegionQueryWrapperQ).getRecords();
  217. if(tRegionList.size() >= 1){
  218. String name = tRegionList.get(0).getName();
  219. if(!ObjectUtils.isEmpty(name)){
  220. record.setDataSourceName(name+"公共资源交易中心");
  221. }
  222. }
  223. if(subSourceCode.equals("150401")){
  224. record.setDataSourceName("赤峰市公共资源交易中心");
  225. }
  226. }
  227. String bidSectionCodes = record.getBidSectionCodes();
  228. if(!ObjectUtils.isEmpty(bidSectionCodes)){
  229. int i1 = bidSectionCodes.indexOf(",");
  230. int i2 = bidSectionCodes.indexOf(";");
  231. int i3 = bidSectionCodes.indexOf("<br>");
  232. int i4 = bidSectionCodes.indexOf("ltbrgt");
  233. String splitBidSectionCode = null;
  234. String[] split = null;
  235. boolean flag = false;
  236. if(i1 > 0){
  237. splitBidSectionCode = bidSectionCodes.split(",")[0];
  238. split = bidSectionCodes.split(",");
  239. flag = true;
  240. }
  241. if(i2 > 0){
  242. splitBidSectionCode = bidSectionCodes.split(";")[0];
  243. split = bidSectionCodes.split(";");
  244. flag = true;
  245. }
  246. if(i3 > 0){
  247. splitBidSectionCode = bidSectionCodes.split("<br>")[0];
  248. split = bidSectionCodes.split("<br>");
  249. flag = true;
  250. }
  251. if(i4 > 0){
  252. splitBidSectionCode = bidSectionCodes.split("ltbrgt")[0];
  253. split = bidSectionCodes.split("ltbrgt");
  254. flag = true;
  255. }
  256. if(!flag){
  257. splitBidSectionCode = bidSectionCodes;
  258. split = bidSectionCodes.split(",");
  259. }
  260. List<GcAttachment> attachmentList = new ArrayList<GcAttachment>();
  261. if(record.getDataTimestamp()>20250324000000L){
  262. //通过标包编号查询对应的附件信息
  263. QueryWrapper<GcAttachment> gcAttachmentQueryWrapper = new QueryWrapper<GcAttachment>();
  264. /*if("2".equals(record.getNoticeNature())){
  265. gcAttachmentQueryWrapper.eq("ATTACHMENT_SET_CODE","CHANGE_NOTICE");//add
  266. }else{
  267. gcAttachmentQueryWrapper.eq("ATTACHMENT_SET_CODE","TENDER_NOTICE");//add
  268. }*/
  269. // gcAttachmentQueryWrapper.eq("isshow", "0");//add
  270. gcAttachmentQueryWrapper.eq("ASSOCIATION_CODE", record.getSourceDataKey());
  271. List<GcAttachment> list = gcAttachmentService.list(gcAttachmentQueryWrapper);
  272. if (!CollectionUtils.isEmpty(list)) {
  273. attachmentList.addAll(list);
  274. }
  275. }else{
  276. if(!ObjectUtils.isEmpty(split)){
  277. if(split.length >=1){
  278. for (String bidSectionCode : split) {
  279. try {
  280. String bidSectionCodeClean = bidSectionCode.replaceAll(">","").replaceAll("<","");
  281. String bidSectionCodeClean2 = bidSectionCodeClean.replaceAll("gt","").replaceAll("lt","");
  282. //通过标包编号查询对应的附件信息
  283. QueryWrapper<GcAttachment> gcAttachmentQueryWrapper = new QueryWrapper<GcAttachment>();
  284. if("2".equals(record.getNoticeNature())){
  285. gcAttachmentQueryWrapper.eq("ATTACHMENT_SET_CODE","CHANGE_NOTICE");//add
  286. }else{
  287. gcAttachmentQueryWrapper.eq("ATTACHMENT_SET_CODE","TENDER_NOTICE");//add
  288. }
  289. //gcAttachmentQueryWrapper.eq("isshow", "0");//add
  290. //gcAttachmentQueryWrapper.eq("BID_SECTION_CODE",bidSectionCode);
  291. gcAttachmentQueryWrapper.like("BID_SECTION_CODE",bidSectionCodeClean2);
  292. List<GcAttachment> list = gcAttachmentService.list(gcAttachmentQueryWrapper);
  293. if(!ObjectUtils.isEmpty(list)){
  294. attachmentList.addAll(list);
  295. }
  296. }catch (Exception e){
  297. e.printStackTrace();
  298. }
  299. }
  300. }
  301. }
  302. }
  303. String noticeContent = record.getNoticeContent();
  304. String file = "";
  305. if(!CollectionUtils.isEmpty(attachmentList)){
  306. if(attachmentList.size() > 0){
  307. file = "<br>附件:<br>";
  308. }
  309. }
  310. for (GcAttachment gcAttachment : attachmentList) {
  311. try{
  312. String attachmentName = gcAttachment.getAttachmentName();
  313. String url = gcAttachment.getUrl();
  314. file += "<a target='_blank' style='color: blue' href='"+ url +"'>"+ attachmentName +"</a><br/>";
  315. }catch (Exception e){
  316. e.printStackTrace();
  317. }
  318. }
  319. //招标文件拼接地址
  320. if(!ObjectUtils.isEmpty(noticeContent) && noticeContent != ""){
  321. file = noticeContent + file;
  322. }
  323. record.setNoticeContent(file);
  324. //获取标包编号
  325. if(!ObjectUtils.isEmpty(splitBidSectionCode)){
  326. QueryWrapper<GcTenderbidfile> gcTenderbidfileQueryWrapper = new QueryWrapper<GcTenderbidfile>();
  327. Page<GcTenderbidfile> gcTenderbidfilePage = new Page<GcTenderbidfile>(1, 1);
  328. gcTenderbidfileQueryWrapper.eq("BID_SECTION_CODE",splitBidSectionCode);
  329. List<GcTenderbidfile> gcTenderbidfileRecords = gcTenderbidfileService.page(gcTenderbidfilePage, gcTenderbidfileQueryWrapper).getRecords();
  330. if(gcTenderbidfileRecords.size() >= 1){
  331. try {
  332. Integer validPeriod = gcTenderbidfileRecords.get(0).getValidPeriod();
  333. if(!ObjectUtils.isEmpty(validPeriod)){
  334. record.setValidPeriod(validPeriod+"");
  335. }
  336. }catch (Exception e){
  337. e.printStackTrace();
  338. }
  339. try {
  340. Long clarifyTime = gcTenderbidfileRecords.get(0).getClarifyTime();
  341. if(!ObjectUtils.isEmpty(clarifyTime)){
  342. record.setClarifyTime(clarifyTime+"");
  343. }
  344. }catch (Exception e){
  345. e.printStackTrace();
  346. }
  347. try {
  348. Long submitTime = gcTenderbidfileRecords.get(0).getSubmitTime();
  349. if(!ObjectUtils.isEmpty(submitTime)){
  350. record.setSubmitTime(submitTime+"");
  351. }
  352. }catch (Exception e){
  353. e.printStackTrace();
  354. }
  355. }
  356. QueryWrapper<GcBidopenrecord> gcBidopenrecordQueryWrapper = new QueryWrapper<GcBidopenrecord>();
  357. Page<GcBidopenrecord> gcBidopenrecordPage = new Page<GcBidopenrecord>(1, 1);
  358. gcBidopenrecordQueryWrapper.eq("BID_SECTION_CODES",splitBidSectionCode);
  359. List<GcBidopenrecord> gcBidopenrecordRecords = gcBidopenrecordService.page(gcBidopenrecordPage, gcBidopenrecordQueryWrapper).getRecords();
  360. if(gcBidopenrecordRecords.size() >= 1){
  361. try {
  362. String bidOpeningAddress = gcBidopenrecordRecords.get(0).getBidOpeningAddress();
  363. if(!ObjectUtils.isEmpty(bidOpeningAddress)){
  364. record.setBidOpeningAddress(bidOpeningAddress);
  365. }
  366. }catch (Exception e){
  367. e.printStackTrace();
  368. }
  369. try {
  370. Long bidOpeningTime = gcBidopenrecordRecords.get(0).getBidOpeningTime();
  371. if(!ObjectUtils.isEmpty(bidOpeningTime)){
  372. record.setBidOpeningTime(bidOpeningTime+"");
  373. }
  374. }catch (Exception e){
  375. e.printStackTrace();
  376. }
  377. try {
  378. Long bidFinishTime = gcBidopenrecordRecords.get(0).getBidFinishTime();
  379. if(!ObjectUtils.isEmpty(bidFinishTime)){
  380. record.setBidFinishTime(bidFinishTime+"");
  381. }
  382. }catch (Exception e){
  383. e.printStackTrace();
  384. }
  385. }
  386. String noticeNature = record.getNoticeNature();
  387. if(!ObjectUtils.isEmpty(noticeNature)){
  388. try {
  389. String noticeNatureTypeName = BulletinType.getNoticeNatureTypeName(noticeNature);
  390. if(!ObjectUtils.isEmpty(noticeNatureTypeName)){
  391. record.setNoticeNatureName(noticeNatureTypeName);
  392. }
  393. }catch (Exception e){
  394. e.printStackTrace();
  395. }
  396. }
  397. }
  398. }
  399. try {
  400. bidSectionCodes = bidSectionCodes.replaceAll(",",";");
  401. bidSectionCodes = bidSectionCodes.replaceAll("<br",";");
  402. bidSectionCodes = bidSectionCodes.replaceAll("ltbrgt",";");
  403. }catch (Exception e){
  404. e.printStackTrace();
  405. }
  406. record.setBidSectionCodes(bidSectionCodes);
  407. TenderDetailsVoUtils.isNull(record);
  408. }
  409. }
  410. return pageList.getRecords();
  411. }
  412. @Override
  413. public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
  414. try {
  415. if(JobLock.GcNoticeandfileFlag){
  416. JobLock.GcNoticeandfileFlag = false;
  417. logger.info("执行GcNoticeandfile", new SimpleDateFormat().format(new Date()));
  418. try {
  419. queryPageListUpdateEs();
  420. } catch (Exception e) {
  421. e.printStackTrace();
  422. }
  423. JobLock.GcNoticeandfileFlag = true;
  424. }else{
  425. logger.info("不执行GcNoticeandfile", new SimpleDateFormat().format(new Date()));
  426. }
  427. }catch (Exception e){
  428. e.printStackTrace();
  429. JobLock.GcNoticeandfileFlag = true;
  430. }
  431. }
  432. }