|
@@ -1236,12 +1236,31 @@ public class RenBaoNewCrawlerRequestBuilder {
|
|
|
prpCmain.put("linkerName", linkerName != null ? linkerName : "");
|
|
prpCmain.put("linkerName", linkerName != null ? linkerName : "");
|
|
|
|
|
|
|
|
// ========== 日期信息 ==========
|
|
// ========== 日期信息 ==========
|
|
|
- prpCmain.put("startDate", (startDate != null && startDate.length() >= 10) ? startDate.substring(0, 10) : "");
|
|
|
|
|
- prpCmain.put("endDate", (endDate != null && endDate.length() >= 10) ? endDate.substring(0, 10) : "");
|
|
|
|
|
|
|
+ LocalDateTime syStartDateTime;
|
|
|
|
|
+ if (startDate != null && !startDate.isEmpty()) {
|
|
|
|
|
+ syStartDateTime = parseCiDateTime(startDate);
|
|
|
|
|
+ } else {
|
|
|
|
|
+ syStartDateTime = LocalDateTime.now();
|
|
|
|
|
+ }
|
|
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
|
+ LocalDateTime syEndDateTime = syStartDateTime.plusDays(364);
|
|
|
|
|
+ // 终保时间是凌晨0点,调整为前一天24点
|
|
|
|
|
+ prpCmain.put("endDate", syEndDateTime.format(formatter));
|
|
|
|
|
+ prpCmain.put("endHour", "24");
|
|
|
|
|
+ prpCmain.put("endMinute", "00");
|
|
|
|
|
+
|
|
|
|
|
+ prpCmain.put("startDate", syStartDateTime.format(formatter));
|
|
|
String currentDate = java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ISO_LOCAL_DATE);
|
|
String currentDate = java.time.LocalDate.now().format(java.time.format.DateTimeFormatter.ISO_LOCAL_DATE);
|
|
|
|
|
+ // ========== 时间细分 ==========
|
|
|
|
|
+ prpCmain.put("startHour", String.format("%02d", syStartDateTime.getHour()));
|
|
|
|
|
+ prpCmain.put("startMinute", String.format("%02d", syStartDateTime.getMinute()));
|
|
|
|
|
+
|
|
|
prpCmain.put("operateDate", currentDate);
|
|
prpCmain.put("operateDate", currentDate);
|
|
|
prpCmain.put("operateDateOld", currentDate);
|
|
prpCmain.put("operateDateOld", currentDate);
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
// ========== 保单编号相关 ==========
|
|
// ========== 保单编号相关 ==========
|
|
|
prpCmain.put("proposalNoDI", "");
|
|
prpCmain.put("proposalNoDI", "");
|
|
|
prpCmain.put("proposalNoBI", "");
|
|
prpCmain.put("proposalNoBI", "");
|
|
@@ -1544,11 +1563,7 @@ public class RenBaoNewCrawlerRequestBuilder {
|
|
|
// ========== 承保意见 ==========
|
|
// ========== 承保意见 ==========
|
|
|
prpCmain.put("underwritOpinion", "");
|
|
prpCmain.put("underwritOpinion", "");
|
|
|
|
|
|
|
|
- // ========== 时间细分 ==========
|
|
|
|
|
- prpCmain.put("startHour", "00");
|
|
|
|
|
- prpCmain.put("startMinute", "00");
|
|
|
|
|
- prpCmain.put("endHour", "24");
|
|
|
|
|
- prpCmain.put("endMinute", "00");
|
|
|
|
|
|
|
+
|
|
|
|
|
|
|
|
// ========== 邮箱 ==========
|
|
// ========== 邮箱 ==========
|
|
|
prpCmain.put("email", "");
|
|
prpCmain.put("email", "");
|
|
@@ -3158,81 +3173,110 @@ public class RenBaoNewCrawlerRequestBuilder {
|
|
|
* </li>
|
|
* </li>
|
|
|
* </ol>
|
|
* </ol>
|
|
|
*
|
|
*
|
|
|
- * <p>示例:</p>
|
|
|
|
|
- * <pre>
|
|
|
|
|
- * 当前时间: 2025-05-20 14:30:00
|
|
|
|
|
- * 起保日期: 2025-05-21 00:00:00
|
|
|
|
|
- * 终保日期: 2026-05-20 00:00:00 → 调整为 2026-05-19 24:00:00
|
|
|
|
|
- * </pre>
|
|
|
|
|
*
|
|
*
|
|
|
* @param quoteVo 报价请求VO
|
|
* @param quoteVo 报价请求VO
|
|
|
* @return 交强险主信息Map
|
|
* @return 交强险主信息Map
|
|
|
*/
|
|
*/
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建交强险主信息(prpCmainCI)
|
|
|
|
|
+ * <p>
|
|
|
|
|
+ * 逻辑与 Python {@code get_itemKindCI} + {@code get_future_time_with_adjusted_format} 保持一致:
|
|
|
|
|
+ * <ol>
|
|
|
|
|
+ * <li>起保时间:有交强险时用传入的 startDate(含时分),否则用明天当前时间</li>
|
|
|
|
|
+ * <li>终保时间:起保时间 + 365 天</li>
|
|
|
|
|
+ * <li>如果终保时间的时分正好是 00:00,调整为前一天 24:00</li>
|
|
|
|
|
+ * </ol>
|
|
|
|
|
+ * </p>
|
|
|
|
|
+ */
|
|
|
public Map<String, Object> buildPrpCmainCI(QuoteVo quoteVo) {
|
|
public Map<String, Object> buildPrpCmainCI(QuoteVo quoteVo) {
|
|
|
Map<String, Object> prpCmainCI = new HashMap<>();
|
|
Map<String, Object> prpCmainCI = new HashMap<>();
|
|
|
|
|
|
|
|
- // 获取交强险起保和终保日期
|
|
|
|
|
|
|
+ // 获取交强险起保日期
|
|
|
String ciStartDate = quoteVo.getCiRiskInfoVo() != null ? quoteVo.getCiRiskInfoVo().getStartDate() : null;
|
|
String ciStartDate = quoteVo.getCiRiskInfoVo() != null ? quoteVo.getCiRiskInfoVo().getStartDate() : null;
|
|
|
- String ciEndDate = quoteVo.getCiRiskInfoVo() != null ? quoteVo.getCiRiskInfoVo().getEndDate() : null;
|
|
|
|
|
|
|
|
|
|
|
|
+ LocalDateTime startDateTime;
|
|
|
if (ciStartDate == null || ciStartDate.isEmpty()) {
|
|
if (ciStartDate == null || ciStartDate.isEmpty()) {
|
|
|
// =====================================================================
|
|
// =====================================================================
|
|
|
- // 场景:未投保交强险或未指定日期,使用默认日期规则
|
|
|
|
|
|
|
+ // 场景:未投保交强险,起保 = 明天当前时间(与 Python tomorrow_str 一致)
|
|
|
// =====================================================================
|
|
// =====================================================================
|
|
|
- LocalDateTime tomorrow = LocalDateTime.now().plusDays(1); // 起保:明天
|
|
|
|
|
- LocalDateTime nextYear = tomorrow.plusDays(364); // 终保:一年后(364天后)
|
|
|
|
|
-
|
|
|
|
|
- String startDateStr = tomorrow.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
- String startHour = String.format("%02d", tomorrow.getHour());
|
|
|
|
|
- String startMinute = String.format("%02d", tomorrow.getMinute());
|
|
|
|
|
-
|
|
|
|
|
- // 处理终保时间的特殊规则:00:00 调整为前一天 24:00
|
|
|
|
|
- String endDateStr;
|
|
|
|
|
- String endHour;
|
|
|
|
|
- String endMinute;
|
|
|
|
|
- if (nextYear.getHour() == 0 && nextYear.getMinute() == 0) {
|
|
|
|
|
- // 终保时间是凌晨0点,调整为前一天24点
|
|
|
|
|
- LocalDateTime adjustedEndDateTime = nextYear.minusDays(1);
|
|
|
|
|
- endDateStr = adjustedEndDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
- endHour = "24";
|
|
|
|
|
- endMinute = "00";
|
|
|
|
|
- } else {
|
|
|
|
|
- endDateStr = nextYear.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
- endHour = String.format("%02d", nextYear.getHour());
|
|
|
|
|
- endMinute = String.format("%02d", nextYear.getMinute());
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- prpCmainCI.put("startDate", startDateStr);
|
|
|
|
|
- prpCmainCI.put("startHour", startHour);
|
|
|
|
|
- prpCmainCI.put("startMinute", startMinute);
|
|
|
|
|
- prpCmainCI.put("endDate", endDateStr);
|
|
|
|
|
- prpCmainCI.put("endHour", endHour);
|
|
|
|
|
- prpCmainCI.put("endMinute", endMinute);
|
|
|
|
|
|
|
+ startDateTime = LocalDateTime.now().plusDays(1);
|
|
|
} else {
|
|
} else {
|
|
|
// =====================================================================
|
|
// =====================================================================
|
|
|
- // 场景:已指定交强险日期,使用传入的日期
|
|
|
|
|
|
|
+ // 场景:已有交强险,起保 = 传入的 startDate(解析时分,与 Python 一致)
|
|
|
// =====================================================================
|
|
// =====================================================================
|
|
|
- // 只保留日期部分(yyyy-MM-dd)
|
|
|
|
|
- if (ciStartDate.length() > 10) {
|
|
|
|
|
- ciStartDate = ciStartDate.substring(0, 10);
|
|
|
|
|
- }
|
|
|
|
|
- if (ciEndDate != null && ciEndDate.length() > 10) {
|
|
|
|
|
- ciEndDate = ciEndDate.substring(0, 10);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- // 交强险默认起保时间00:00,终保时间24:00
|
|
|
|
|
- prpCmainCI.put("startDate", ciStartDate);
|
|
|
|
|
- prpCmainCI.put("endDate", ciEndDate);
|
|
|
|
|
- prpCmainCI.put("startHour", "00");
|
|
|
|
|
- prpCmainCI.put("startMinute", "00");
|
|
|
|
|
- prpCmainCI.put("endHour", "24");
|
|
|
|
|
- prpCmainCI.put("endMinute", "00");
|
|
|
|
|
|
|
+ startDateTime = parseCiDateTime(ciStartDate);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ // 起保日期和时分
|
|
|
|
|
+ String startDateStr = startDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
+ String startHour = String.format("%02d", startDateTime.getHour());
|
|
|
|
|
+ String startMinute = String.format("%02d", startDateTime.getMinute());
|
|
|
|
|
+
|
|
|
|
|
+ // 终保 = 起保 + 365 天(与 Python timedelta(days=365) 一致)
|
|
|
|
|
+ LocalDateTime endDateTime = startDateTime.plusDays(365);
|
|
|
|
|
+
|
|
|
|
|
+ // 处理终保时间的特殊规则:00:00 调整为前一天 24:00(与 Python 一致)
|
|
|
|
|
+ String endDateStr;
|
|
|
|
|
+ String endHour;
|
|
|
|
|
+ String endMinute;
|
|
|
|
|
+ if (endDateTime.getHour() == 0 && endDateTime.getMinute() == 0) {
|
|
|
|
|
+ // 终保时间是凌晨0点,调整为前一天24点
|
|
|
|
|
+ LocalDateTime adjustedEndDateTime = endDateTime.minusDays(1);
|
|
|
|
|
+ endDateStr = adjustedEndDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
+ endHour = "24";
|
|
|
|
|
+ endMinute = "00";
|
|
|
|
|
+ } else {
|
|
|
|
|
+ endDateStr = endDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
+ endHour = String.format("%02d", endDateTime.getHour());
|
|
|
|
|
+ endMinute = String.format("%02d", endDateTime.getMinute());
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ prpCmainCI.put("startDate", startDateStr);
|
|
|
|
|
+ prpCmainCI.put("startHour", startHour);
|
|
|
|
|
+ prpCmainCI.put("startMinute", startMinute);
|
|
|
|
|
+ prpCmainCI.put("endDate", endDateStr);
|
|
|
|
|
+ prpCmainCI.put("endHour", endHour);
|
|
|
|
|
+ prpCmainCI.put("endMinute", endMinute);
|
|
|
prpCmainCI.put("proposalNo", "");
|
|
prpCmainCI.put("proposalNo", "");
|
|
|
|
|
|
|
|
return prpCmainCI;
|
|
return prpCmainCI;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 解析交强险日期时间字符串为 LocalDateTime
|
|
|
|
|
+ * <p>
|
|
|
|
|
+ * 兼容格式(与 Python strptime 对应):
|
|
|
|
|
+ * <ul>
|
|
|
|
|
+ * <li>{@code yyyy-MM-dd HH:mm:ss}(对应 Python "%Y-%m-%d %H:%M:%S")</li>
|
|
|
|
|
+ * <li>{@code yyyy-MM-dd HH:mm}(对应 Python "%Y-%m-%d %H:%M")</li>
|
|
|
|
|
+ * <li>{@code yyyy-MM-dd}(纯日期,时分默认为 00:00)</li>
|
|
|
|
|
+ * </ul>
|
|
|
|
|
+ * </p>
|
|
|
|
|
+ */
|
|
|
|
|
+ private LocalDateTime parseCiDateTime(String dateTimeStr) {
|
|
|
|
|
+ if (dateTimeStr == null || dateTimeStr.isEmpty()) {
|
|
|
|
|
+ return LocalDateTime.now().plusDays(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 尝试 yyyy-MM-dd HH:mm:ss
|
|
|
|
|
+ return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
|
|
+ } catch (Exception e1) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 尝试 yyyy-MM-dd HH:mm
|
|
|
|
|
+ return LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
|
|
|
|
|
+ } catch (Exception e2) {
|
|
|
|
|
+ try {
|
|
|
|
|
+ // 尝试 yyyy-MM-dd,默认 00:00
|
|
|
|
|
+ LocalDate date = LocalDate.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd"));
|
|
|
|
|
+ return date.atStartOfDay();
|
|
|
|
|
+ } catch (Exception e3) {
|
|
|
|
|
+ // 都解析失败,回退到明天当前时间
|
|
|
|
|
+ return LocalDateTime.now().plusDays(1);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/**
|
|
/**
|
|
|
* 构建 prpCmainCommon(通用主信息)- 完整版本,与Python保持一致
|
|
* 构建 prpCmainCommon(通用主信息)- 完整版本,与Python保持一致
|
|
|
*/
|
|
*/
|