|
|
@@ -254,6 +254,65 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
return null;
|
|
|
}
|
|
|
|
|
|
+ private static String extractDate(String text) {
|
|
|
+ java.util.regex.Pattern pattern = java.util.regex.Pattern.compile("\\d{4}-\\d{2}-\\d{2}");
|
|
|
+ java.util.regex.Matcher matcher = pattern.matcher(text);
|
|
|
+ if (matcher.find()) {
|
|
|
+ return matcher.group();
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String formatToStandardDateTime(String raw) {
|
|
|
+ if (raw == null || raw.isEmpty()) return "";
|
|
|
+
|
|
|
+ // 提取所有数字
|
|
|
+ List<String> nums = new ArrayList<>();
|
|
|
+ Matcher m = Pattern.compile("\\d+").matcher(raw);
|
|
|
+ while (m.find()) nums.add(m.group());
|
|
|
+
|
|
|
+ if (nums.size() < 3) return raw;
|
|
|
+
|
|
|
+ String ymd = nums.get(0) + "-" + nums.get(1) + "-" + nums.get(2);
|
|
|
+ String hh = nums.size() >= 4 ? nums.get(3) : "00";
|
|
|
+ String mm = nums.size() >= 5 ? nums.get(4) : "00";
|
|
|
+ String ss = nums.size() >= 6 ? nums.get(5) : "00";
|
|
|
+
|
|
|
+ return ymd + " " + hh + ":" + mm + ":" + ss;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<String> multipleStartDate(PremiumCalculationResponse response) {
|
|
|
+ List<String> timeList = new ArrayList<>();
|
|
|
+ if (response == null || response.getHead() == null) {
|
|
|
+ return timeList;
|
|
|
+ }
|
|
|
+
|
|
|
+ String errorMsg = response.getHead().getErrorMessage();
|
|
|
+ if (errorMsg == null || errorMsg.isEmpty()) {
|
|
|
+ return timeList;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 正则匹配:起保日期 + 日期时间(兼容所有格式)
|
|
|
+ Pattern pattern = Pattern.compile("起保日期[\\s:]+([\\d\\s:-]+)");
|
|
|
+ Matcher matcher = pattern.matcher(errorMsg);
|
|
|
+
|
|
|
+ while (matcher.find() && timeList.size() < 2) {
|
|
|
+ String rawDate = matcher.group(1).trim();
|
|
|
+ String formattedDate = formatToStandardDateTime(rawDate);
|
|
|
+ timeList.add(formattedDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ return timeList;
|
|
|
+ }
|
|
|
+
|
|
|
+ private String addOneYear(String dateStr) {
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ LocalDateTime dateTime = LocalDateTime.parse(dateStr, formatter);
|
|
|
+ // 加 1 年
|
|
|
+ LocalDateTime nextYear = dateTime.plusYears(1);
|
|
|
+ return nextYear.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 重复报价
|
|
|
*
|
|
|
@@ -270,35 +329,80 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
* 重复投保
|
|
|
*/
|
|
|
// 获取新起保时间 终保时间
|
|
|
+ //判断出现两次起保日期
|
|
|
+ boolean hasTwoStartDates = premiumCalculationResponse.getHead().getErrorMessage() != null
|
|
|
+ && premiumCalculationResponse.getHead().getErrorMessage().indexOf("起保日期") != -1 // 第一次出现
|
|
|
+ && premiumCalculationResponse.getHead().getErrorMessage().indexOf("起保日期",
|
|
|
+ premiumCalculationResponse.getHead().getErrorMessage().indexOf("起保日期") + 1) != -1; // 第二次出现
|
|
|
+
|
|
|
final String startDate = extractEndDate(premiumCalculationResponse);
|
|
|
String endDate;
|
|
|
if (startDate != null) {
|
|
|
- if (startDate.endsWith("00:00:00")) {
|
|
|
- endDate = TimeProcessing.minusOneSecondAfterYear(startDate);
|
|
|
- } else {
|
|
|
- endDate = TimeProcessing.plusOneYearToString(startDate);
|
|
|
- }
|
|
|
- final String formatStartDate = startDate;
|
|
|
- final String formatEndDate = endDate;
|
|
|
- PremiumCalculationResponse finalPremiumCalculationResponse = premiumCalculationResponse;
|
|
|
- quoteInfoVo.getRiskList().forEach(riskInfoVo -> {
|
|
|
- String start, end = "";
|
|
|
-
|
|
|
- if (riskInfoVo.getRiskCode().equals("0507") && finalPremiumCalculationResponse.getHead().getErrorMessage().contains("交强")) {
|
|
|
- riskInfoVo.setStartDate(formatStartDate);
|
|
|
- riskInfoVo.setEndDate(formatEndDate);
|
|
|
- }
|
|
|
|
|
|
- // 处理商业险的即时起保
|
|
|
- if (riskInfoVo.getRiskCode().equals("0510")) {
|
|
|
- if (!formatStartDate.endsWith("00:00:00")) {
|
|
|
- start = TimeProcessing.tomorrowDateTime(formatStartDate);
|
|
|
- end = TimeProcessing.tomorrowDateTime(formatEndDate);
|
|
|
- riskInfoVo.setStartDate(start);
|
|
|
- riskInfoVo.setEndDate(end);
|
|
|
+ //如果出现起保日期两次 就是 交强商业都重复投保了
|
|
|
+ if(hasTwoStartDates)
|
|
|
+ {
|
|
|
+ String jqEndDate,syEndDate = "";
|
|
|
+ List<String> timeList = multipleStartDate(premiumCalculationResponse);
|
|
|
+ for(int i=0;i<timeList.size();i++){
|
|
|
+ timeList.set(i,addOneYear(timeList.get(i)));
|
|
|
+ }
|
|
|
+ if(timeList.size() < 2){
|
|
|
+ throw new SystemException("处理重复投保时间异常");
|
|
|
+ }
|
|
|
+ if (timeList.get(0).endsWith("00:00:00")) {
|
|
|
+ jqEndDate = TimeProcessing.minusOneSecondAfterYear(startDate);
|
|
|
+ } else {
|
|
|
+ jqEndDate = TimeProcessing.plusOneYearToString(startDate);
|
|
|
+ }
|
|
|
+ if (timeList.get(1).endsWith("00:00:00")) {
|
|
|
+ syEndDate = TimeProcessing.minusOneSecondAfterYear(startDate);
|
|
|
+ } else {
|
|
|
+ syEndDate = TimeProcessing.plusOneYearToString(startDate);
|
|
|
+ }
|
|
|
+ String jqFinalEndDate = jqEndDate;
|
|
|
+ String syFinalEndDate = syEndDate;
|
|
|
+ quoteInfoVo.getRiskList().forEach(riskInfoVo -> {
|
|
|
+ // 判断险种代码是 0507
|
|
|
+ if ("0507".equals(riskInfoVo.getRiskCode())) {
|
|
|
+ // 设置起保日期(第一次)
|
|
|
+ riskInfoVo.setStartDate(timeList.get(0));
|
|
|
+ // 设置终保日期
|
|
|
+ riskInfoVo.setEndDate(jqFinalEndDate);
|
|
|
+ }
|
|
|
+ if("0510".equals(riskInfoVo.getRiskCode())){
|
|
|
+ riskInfoVo.setStartDate(timeList.get(1));
|
|
|
+ riskInfoVo.setEndDate(syFinalEndDate);
|
|
|
}
|
|
|
+ });
|
|
|
+ }else {
|
|
|
+ if (startDate.endsWith("00:00:00")) {
|
|
|
+ endDate = TimeProcessing.minusOneSecondAfterYear(startDate);
|
|
|
+ } else {
|
|
|
+ endDate = TimeProcessing.plusOneYearToString(startDate);
|
|
|
}
|
|
|
- });
|
|
|
+ final String formatStartDate = startDate;
|
|
|
+ final String formatEndDate = endDate;
|
|
|
+ PremiumCalculationResponse finalPremiumCalculationResponse = premiumCalculationResponse;
|
|
|
+ quoteInfoVo.getRiskList().forEach(riskInfoVo -> {
|
|
|
+ String start, end = "";
|
|
|
+
|
|
|
+ if (riskInfoVo.getRiskCode().equals("0507") && finalPremiumCalculationResponse.getHead().getErrorMessage().contains("交强")) {
|
|
|
+ riskInfoVo.setStartDate(formatStartDate);
|
|
|
+ riskInfoVo.setEndDate(formatEndDate);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理商业险的即时起保
|
|
|
+ if (riskInfoVo.getRiskCode().equals("0510")) {
|
|
|
+ if (!formatStartDate.endsWith("00:00:00")) {
|
|
|
+ start = TimeProcessing.tomorrowDateTime(formatStartDate);
|
|
|
+ end = TimeProcessing.tomorrowDateTime(formatEndDate);
|
|
|
+ riskInfoVo.setStartDate(start);
|
|
|
+ riskInfoVo.setEndDate(end);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
premiumCalculationRequest = new PremiumCalculationRequest(quoteInfoVo, carActualValue, parameters, vehicle, quoteVo, quoteInfoVo.getRiskList(), null);
|
|
|
premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest);
|
|
|
maxQuoteNum--;
|