XcrEnterprisePollutionPermitInfoServiceImpl.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. package com.zksy.data.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.zksy.data.annotation.XhDataLogRecord;
  4. import com.zksy.data.domain.po.XcrEnterprisePollutionPermitInfo;
  5. import com.zksy.data.domain.response.XcrEnterprisePollutionPermitInfoResponse;
  6. import com.zksy.data.service.XcrEnterprisePollutionPermitInfoService;
  7. import com.zksy.data.mapper.XcrEnterprisePollutionPermitInfoMapper;
  8. import com.zksy.data.utils.RedisService;
  9. import com.zksy.data.utils.XhRequestUtil;
  10. import lombok.extern.slf4j.Slf4j;
  11. import org.springframework.beans.factory.annotation.Autowired;
  12. import org.springframework.stereotype.Service;
  13. import org.springframework.transaction.annotation.Transactional;
  14. import java.text.ParseException;
  15. import java.text.SimpleDateFormat;
  16. import java.util.Date;
  17. import java.util.List;
  18. import java.util.Locale;
  19. import java.util.Vector;
  20. import java.util.stream.Collectors;
  21. /**
  22. * @author 邵洋
  23. * @description 针对表【xcr_enterprise_pollution_permit_info(企业排污许可信息表)】的数据库操作Service实现
  24. * @createDate 2024-10-25 10:12:46
  25. */
  26. @Service
  27. @Slf4j
  28. public class XcrEnterprisePollutionPermitInfoServiceImpl extends ServiceImpl<XcrEnterprisePollutionPermitInfoMapper, XcrEnterprisePollutionPermitInfo>
  29. implements XcrEnterprisePollutionPermitInfoService{
  30. @Autowired
  31. private XhRequestUtil xhRequestUtil;
  32. @Autowired
  33. private RedisService redisService;
  34. @Override
  35. @Transactional(rollbackFor = Exception.class)
  36. @XhDataLogRecord("同步企业排污许可信息")
  37. public void saveDataByUniCode(String address) {
  38. //模拟从数据库中取数据大约为3000-4000条
  39. List<String> creditCodes = (List<String>) redisService.getList("creditCodes").get(0);
  40. Vector<XcrEnterprisePollutionPermitInfo> toDatabaseList = new Vector<>();
  41. creditCodes.parallelStream().forEach(creditCode -> {
  42. List<XcrEnterprisePollutionPermitInfo> list = xhRequestUtil.httpRequestByUniCode(creditCode, address,
  43. XcrEnterprisePollutionPermitInfoResponse.class,
  44. XcrEnterprisePollutionPermitInfo.class,
  45. "SHXYDM"
  46. );
  47. if(list != null){
  48. toDatabaseList.addAll(list);
  49. }
  50. });
  51. // 定义多种日期格式
  52. String[] datePatterns = {
  53. "dd-MMM-yy", // 09-DEC-21
  54. "dd-MMM-yy HH.mm.ss.SSSSSSSSS a", // 09-7月 -20 12.00.00.000000000 上午
  55. "yyyy/MM/dd HH:mm:ss.SSS", // 2020/04/16 00:00:00.000
  56. "yyyy-MM-dd",
  57. "yyyy.MM.dd"
  58. };
  59. List<XcrEnterprisePollutionPermitInfo> enterprisePollutionPermitInfoList = toDatabaseList.stream().map(q -> {
  60. Date date = parseDate(q.getXKZFFSJ(), datePatterns);
  61. q.setA(formatDate(date));
  62. return q;
  63. }).collect(Collectors.toList());
  64. this.remove(null);
  65. this.saveBatch(enterprisePollutionPermitInfoList);
  66. log.info("企业排污许可信息同步完成");
  67. }
  68. // 尝试多种日期格式进行解析
  69. private Date parseDate(String dateString, String[] patterns) {
  70. if (dateString == null || dateString.trim().isEmpty()) {
  71. log.warn("日期字符串为空或空白: {}", dateString);
  72. return null; // 或者返回一个默认日期
  73. }
  74. for (String pattern : patterns) {
  75. try {
  76. // 使用正确的 Locale
  77. Locale locale = pattern.contains("a") ? Locale.CHINA : Locale.US;
  78. SimpleDateFormat inputFormat = new SimpleDateFormat(pattern, locale);
  79. return inputFormat.parse(dateString);
  80. } catch (ParseException e) {
  81. // 继续尝试下一个格式
  82. }
  83. }
  84. throw new IllegalArgumentException("无法识别的日期格式: " + dateString);
  85. }
  86. private Date formatDate(Date date) {
  87. if (date == null) {
  88. return null; // 或者返回一个默认值
  89. }
  90. SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.US);
  91. String formattedDateStr = outputFormat.format(date);
  92. try {
  93. return outputFormat.parse(formattedDateStr);
  94. } catch (ParseException e) {
  95. throw new RuntimeException("日期格式化失败", e);
  96. }
  97. }
  98. }