|
|
@@ -1,9 +1,11 @@
|
|
|
package com.ydtech.modules.order.service.impl;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
|
+import cn.hutool.json.JSONUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
+import com.fasterxml.jackson.annotation.JsonProperty;
|
|
|
import com.ydtech.config.properties.ChengTaiApiConfigurationProperties;
|
|
|
import com.ydtech.constants.enums.InsuranceOrderPdf;
|
|
|
import com.ydtech.constants.enums.InsuranceRisk;
|
|
|
@@ -18,10 +20,12 @@ import com.ydtech.modules.order.components.ConfigureParametersComponents;
|
|
|
import com.ydtech.modules.order.components.InsImagesUploadCacheComponents;
|
|
|
import com.ydtech.modules.order.components.chengtai.ChengTaiRequestApiComponent;
|
|
|
import com.ydtech.modules.order.components.chengtai.ChengTaiRequestApiComponents;
|
|
|
+import com.ydtech.modules.order.components.gouren.GuorenDuplicateInsuranceComponent;
|
|
|
import com.ydtech.modules.order.constants.QuoteNumberConstant;
|
|
|
import com.ydtech.modules.order.dao.SysQuoteRecordMapper;
|
|
|
import com.ydtech.modules.order.entity.*;
|
|
|
import com.ydtech.modules.order.entity.api.chengtai.SecurityUrl;
|
|
|
+import com.ydtech.modules.order.entity.api.chengtai.XmlDateTimeFormatter;
|
|
|
import com.ydtech.modules.order.entity.api.chengtai.constants.*;
|
|
|
import com.ydtech.modules.order.entity.api.chengtai.request.*;
|
|
|
import com.ydtech.modules.order.entity.api.chengtai.response.*;
|
|
|
@@ -36,10 +40,12 @@ import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo;
|
|
|
import com.ydtech.modules.order.entity.vo.BaseQuoteVo;
|
|
|
import com.ydtech.modules.order.entity.vo.PolicyPrintVo;
|
|
|
import com.ydtech.modules.order.service.*;
|
|
|
+import com.ydtech.modules.order.utils.TimeProcessing;
|
|
|
import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
|
|
|
import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
|
|
|
import com.ydtech.utils.*;
|
|
|
import com.ydtech.utils.baidu.FileUtil;
|
|
|
+import lombok.Data;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
|
@@ -50,8 +56,12 @@ import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
import java.time.LocalDate;
|
|
|
import java.time.LocalDateTime;
|
|
|
+import java.time.OffsetDateTime;
|
|
|
+import java.time.ZoneOffset;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
@@ -241,36 +251,77 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
/** 3. 计算车辆实际价值 */
|
|
|
BigDecimal carActualValue = calculateCarActualValue(vehicle,quoteInfoVo.getCarInfo());
|
|
|
/** 4. 报价 */
|
|
|
- PremiumCalculationRequest premiumCalculationRequest = new PremiumCalculationRequest(quoteInfoVo,carActualValue,parameters,vehicle,quoteVo,quoteInfoVo.getRiskList());
|
|
|
+ PremiumCalculationRequest premiumCalculationRequest = new PremiumCalculationRequest(quoteInfoVo,carActualValue,parameters,vehicle,quoteVo,quoteInfoVo.getRiskList(),null);
|
|
|
PremiumCalculationResponse premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest);
|
|
|
// 报价失败
|
|
|
if (!premiumCalculationResponse.getHead().getResponseCode().equals("0000")) {
|
|
|
- //重复投保 测试环境报不出重复投保
|
|
|
/**
|
|
|
- *
|
|
|
+ * 重复投保
|
|
|
*/
|
|
|
- InsOrders insOrders = insOrdersService.getById(quoteVo.getOrderNo());
|
|
|
- InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
|
|
|
- String subOrderNo = insOrdersService.responseFailedOrder(quoteVo,quoteInfoVo, ptlAgreementAttribution, insOrders, premiumCalculationResponse.getHead().getErrorMessage(), insOrderStatusEnum);
|
|
|
- SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
|
|
|
- QuoteNumberConstant.QuoteAction.QUOTE_FAILED.getCode().toString(),QuoteNumberConstant.QuoteResult.FAIL.getCode().toString());
|
|
|
- sysQuoteRecords.add(sysQuoteRecord);
|
|
|
- //存储报价记录
|
|
|
- sysQuoteRecords.forEach(item->{
|
|
|
- item.setSubOrderNo(subOrderNo);
|
|
|
- });
|
|
|
- sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
|
|
|
- //刷新redis中的报价次数
|
|
|
- sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteInfoVo.getUserid(),sysQuoteRecords);
|
|
|
- throw new SystemException(premiumCalculationResponse.getHead().getErrorMessage());
|
|
|
+ // 获取新起保时间 终保时间
|
|
|
+ final String startDate = extractEndDate(premiumCalculationResponse);
|
|
|
+ String endDate;
|
|
|
+ if (startDate != null){
|
|
|
+ if (startDate.endsWith("00:00:00")) {
|
|
|
+ endDate = TimeProcessing.minusOneSecondAfterYear(startDate);
|
|
|
+ } else {
|
|
|
+ endDate = TimeProcessing.minusOneDayAfterYear(startDate);
|
|
|
+ }
|
|
|
+ final String formatStartDate = XmlDateTimeFormatter.format(startDate);
|
|
|
+ final String formatEndDate = XmlDateTimeFormatter.format(endDate);
|
|
|
+ quoteInfoVo.getRiskList().forEach(riskInfoVo -> {
|
|
|
+ riskInfoVo.setStartDate(formatStartDate);
|
|
|
+ riskInfoVo.setEndDate(formatEndDate);
|
|
|
+ });
|
|
|
+ premiumCalculationRequest = new PremiumCalculationRequest(quoteInfoVo,carActualValue,parameters,vehicle,quoteVo,quoteInfoVo.getRiskList(),null);
|
|
|
+ premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest);
|
|
|
+ } else {
|
|
|
+ InsOrders insOrders = insOrdersService.getById(quoteVo.getOrderNo());
|
|
|
+ InsOrderStatusEnum insOrderStatusEnum = InsOrderStatusEnum.QUOTE_FAILED;
|
|
|
+ String subOrderNo = insOrdersService.responseFailedOrder(quoteVo,quoteInfoVo, ptlAgreementAttribution, insOrders, premiumCalculationResponse.getHead().getErrorMessage(), insOrderStatusEnum);
|
|
|
+ SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
|
|
|
+ QuoteNumberConstant.QuoteAction.QUOTE_FAILED.getCode().toString(),QuoteNumberConstant.QuoteResult.FAIL.getCode().toString());
|
|
|
+ sysQuoteRecords.add(sysQuoteRecord);
|
|
|
+ //存储报价记录
|
|
|
+ sysQuoteRecords.forEach(item->{
|
|
|
+ item.setSubOrderNo(subOrderNo);
|
|
|
+ });
|
|
|
+ sysQuoteRecordMapper.insertBatch(sysQuoteRecords);
|
|
|
+ //刷新redis中的报价次数
|
|
|
+ sysQuoteRedisService.refreshQuoteNum(quoteVo.getCompanyId(),quoteInfoVo.getUserid(),sysQuoteRecords);
|
|
|
+ throw new SystemException(premiumCalculationResponse.getHead().getErrorMessage());
|
|
|
+ }
|
|
|
}
|
|
|
- // 处理报价数据
|
|
|
- QuoteRespVo quoteRespVo = getQuoteRespVo(premiumCalculationResponse, quoteInfoVo);
|
|
|
- quoteRespVo.setCoreModels(vehicle.toCoreModelsVo());
|
|
|
+ // 转保处理
|
|
|
+ String ciQuestion = premiumCalculationResponse.getCompRisk() != null
|
|
|
+ ? premiumCalculationResponse.getCompRisk().getBasePart().getQuestion()
|
|
|
+ : null;
|
|
|
+ String biQuestion = premiumCalculationResponse.getCommRisk() != null
|
|
|
+ ? premiumCalculationResponse.getCommRisk().getBasePart().getQuestion()
|
|
|
+ : null;
|
|
|
// 订单号
|
|
|
String orderNumber = premiumCalculationResponse.getCompRisk() != null
|
|
|
? premiumCalculationResponse.getCompRisk().getFtrno().getOrderNumber()
|
|
|
: premiumCalculationResponse.getCommRisk().getFtrno().getOrderNumber();
|
|
|
+ Map<String, String> bodyMap = new HashMap<>();
|
|
|
+ if (Objects.nonNull(ciQuestion)) {
|
|
|
+ bodyMap.put("jqImage", ciQuestion);
|
|
|
+ }
|
|
|
+ if (Objects.nonNull(biQuestion)) {
|
|
|
+ bodyMap.put("syImage", biQuestion);
|
|
|
+ }
|
|
|
+ String sendBody = JsonUtils.toJson(bodyMap);
|
|
|
+ if (!"{}".equals(sendBody)) {
|
|
|
+ String ocrStr = HttpUtil.sendPost("http://39.98.41.104:8088/getres", sendBody);
|
|
|
+ CheckCodeResp resp = JSONUtil.toBean(ocrStr, CheckCodeResp.class);
|
|
|
+ quoteVo.setRenewalCodeJq(resp.getJqImageCode());
|
|
|
+ quoteVo.setRenewalCodeSy(resp.getSyImageCode());
|
|
|
+ premiumCalculationRequest = new PremiumCalculationRequest(quoteInfoVo,carActualValue,parameters,vehicle,quoteVo,quoteInfoVo.getRiskList(),orderNumber);
|
|
|
+ premiumCalculationResponse = chengTaiRequestApiComponent.premiumCalculation(premiumCalculationRequest);
|
|
|
+ }
|
|
|
+ // 处理报价数据
|
|
|
+ QuoteRespVo quoteRespVo = getQuoteRespVo(premiumCalculationResponse, quoteInfoVo);
|
|
|
+ quoteRespVo.setCoreModels(vehicle.toCoreModelsVo());
|
|
|
HttpResult<QuoteRespVo> quoteRespVoHttpResult = respOrder(premiumCalculationResponse, quoteRespVo, ptlAgreementAttribution, orderNumber, quoteInfoVo,premiumCalculationRequest);
|
|
|
|
|
|
SysQuoteRecord sysQuoteRecord = new SysQuoteRecord(quoteInfoVo.getUserid(),quoteVo.getCompanyId(),quoteInfoVo.getCarInfo().getLicenseNo(),
|
|
|
@@ -323,6 +374,22 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
return carActualValue;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 重复报价提取终保日期
|
|
|
+ * @param response
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private String extractEndDate(PremiumCalculationResponse response) {
|
|
|
+ String targetText = response.getHead().getErrorMessage();
|
|
|
+ Pattern pattern = Pattern.compile("终保日期 (\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2})");
|
|
|
+ Matcher matcher = pattern.matcher(targetText);
|
|
|
+ if (matcher.find()) {
|
|
|
+ String dateStr = matcher.group(1);
|
|
|
+ return dateStr + ":00";
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
// /**
|
|
|
// * 重复报价
|
|
|
// * @param insurePremiumRequest
|
|
|
@@ -689,14 +756,21 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
List<RiskInfoVo> riskList = yaQuoteInfoVo.getRiskList();
|
|
|
// 报价险种放入保费
|
|
|
List<QuoteRiskRespVo> riskList1 = QuoteRiskRespVo.toQuoteRiskRespVoList(riskList, jqPremium, syPremium);
|
|
|
-
|
|
|
+ final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
for (QuoteRiskRespVo quoteRiskRespVo : riskList1) {
|
|
|
+ // 时间格式转换
|
|
|
+ OffsetDateTime startDateTime = OffsetDateTime.parse(quoteRiskRespVo.getStartDate());
|
|
|
+ OffsetDateTime endDateTime = OffsetDateTime.parse(quoteRiskRespVo.getEndDate());
|
|
|
+
|
|
|
+ String startDateStr = startDateTime.format(FORMATTER);
|
|
|
+ String endDateStr = endDateTime.format(FORMATTER);
|
|
|
+
|
|
|
if (InsuranceRisk.TRAFFIC.getCode().equals(quoteRiskRespVo.getRiskCode())) {
|
|
|
- quoteRespVo.setStartDateJq(quoteRiskRespVo.getStartDate());
|
|
|
- quoteRespVo.setEndDateJq(quoteRiskRespVo.getEndDate());
|
|
|
+ quoteRespVo.setStartDateJq(startDateStr);
|
|
|
+ quoteRespVo.setEndDateJq(endDateStr);
|
|
|
} else if (InsuranceRisk.BUSINESS.getCode().equals(quoteRiskRespVo.getRiskCode())) {
|
|
|
- quoteRespVo.setStartDateSy(quoteRiskRespVo.getStartDate());
|
|
|
- quoteRespVo.setEndDateSy(quoteRiskRespVo.getEndDate());
|
|
|
+ quoteRespVo.setStartDateSy(startDateStr);
|
|
|
+ quoteRespVo.setEndDateSy(endDateStr);
|
|
|
}
|
|
|
}
|
|
|
List<QuoteKindRespVo> kindList1 = new ArrayList<>();
|
|
|
@@ -1563,15 +1637,15 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
String dir = "carInsPolicy/" + licensePlate + "/";
|
|
|
return FileUtil.netUrlToFile(url, dir, fileName, uploadFilePath, apiUrl + showFileUrl);
|
|
|
}
|
|
|
-//
|
|
|
-// @Data
|
|
|
-// static class CheckCodeResp {
|
|
|
-//
|
|
|
-// @JsonProperty(value = "jqImageCode")
|
|
|
-// String jqImageCode;
|
|
|
-//
|
|
|
-// @JsonProperty(value = "syImageCode")
|
|
|
-// String syImageCode;
|
|
|
-//
|
|
|
-// }
|
|
|
+
|
|
|
+ @Data
|
|
|
+ static class CheckCodeResp {
|
|
|
+
|
|
|
+ @JsonProperty(value = "jqImageCode")
|
|
|
+ String jqImageCode;
|
|
|
+
|
|
|
+ @JsonProperty(value = "syImageCode")
|
|
|
+ String syImageCode;
|
|
|
+
|
|
|
+ }
|
|
|
}
|