|
|
@@ -36,6 +36,7 @@ import com.ydtech.modules.order.service.*;
|
|
|
import com.ydtech.modules.protocol.entity.po.PtlAgreementAttribution;
|
|
|
import com.ydtech.modules.protocol.service.PtlAgreementAttributionService;
|
|
|
import com.ydtech.utils.CalculateUtils;
|
|
|
+import com.ydtech.utils.DateTimeUtil;
|
|
|
import com.ydtech.utils.StringUtils;
|
|
|
import com.ydtech.utils.baidu.FileUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -43,7 +44,6 @@ import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.http.HttpHeaders;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.math.BigDecimal;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.format.DateTimeFormatter;
|
|
|
import java.util.*;
|
|
|
@@ -117,7 +117,9 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
PersonAreaVo personAreaVo = new PersonAreaVo();
|
|
|
buildRegion(quoteInfoVo,personAreaVo);
|
|
|
InsurePremiumRequest insurePremiumRequest = new InsurePremiumRequest(quoteInfoVo,carModelListDTO, carActualValueResponse,personAreaVo,parameters,quoteVo, carModelListDTO);
|
|
|
- InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
|
|
|
+
|
|
|
+ // 重复报价
|
|
|
+ InsurePremiumResponse insurePremiumResponse = this.getResponse(insurePremiumRequest, httpHeaders);
|
|
|
|
|
|
String message = "";
|
|
|
if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode())){
|
|
|
@@ -153,6 +155,94 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
return responseOrder(insurePremiumResponse, quoteRespVo, ptlAgreementAttribution, insurePremiumResponse.getOrderId());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 递归报价
|
|
|
+ * @param insurePremiumRequest
|
|
|
+ * @param httpHeaders
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private InsurePremiumResponse getResponse(InsurePremiumRequest insurePremiumRequest, HttpHeaders httpHeaders) throws Exception {
|
|
|
+ InsurePremiumResponse insurePremiumResponse = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
|
|
|
+ if(!ResponseCode.R_000.getCode().equals(insurePremiumResponse.getCode()) && insurePremiumResponse.getMessage().contains("重复投保")){
|
|
|
+ // 交强险 商业险 重复投保处理
|
|
|
+ this.repetitionInsure(insurePremiumResponse,insurePremiumRequest);
|
|
|
+ InsurePremiumResponse response = chengTaiRequestApiComponents.quoteApi(insurePremiumRequest,httpHeaders);
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ return insurePremiumResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 重复投保时间处理
|
|
|
+ *
|
|
|
+ * @param insurePremiumResponse
|
|
|
+ * @param insurePremiumRequest
|
|
|
+ */
|
|
|
+ private void repetitionInsure(InsurePremiumResponse insurePremiumResponse, InsurePremiumRequest insurePremiumRequest) {
|
|
|
+ String err = insurePremiumResponse.getMessage();
|
|
|
+ List<String> errList = Arrays.asList(err.split("。"));
|
|
|
+ if(CollUtil.isEmpty(errList)){ return; }
|
|
|
+
|
|
|
+ // 定义时间格式
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
|
|
|
+ errList.stream().forEach(a ->{
|
|
|
+ if (a.contains("交强险平台") && a.contains("重复投保")){
|
|
|
+ InsurePremiumRequest.CiContractDTO ciContract = insurePremiumRequest.getCiContract();
|
|
|
+ InsurePremiumRequest.CiContractDTO.ContractMainDTO contractMain = ciContract.getContractMain();
|
|
|
+
|
|
|
+ LocalDateTime dateTime = null;
|
|
|
+ if(a.contains("终保日期")){
|
|
|
+ String startTime = a.substring(a.indexOf("终保日期")+5,a.indexOf("终保日期")+21);
|
|
|
+ // 解析原始时间
|
|
|
+ dateTime = LocalDateTime.parse(startTime, formatter1);
|
|
|
+ }else{
|
|
|
+ String startTime = contractMain.getExpiryDate();
|
|
|
+ // 解析原始时间
|
|
|
+ dateTime = LocalDateTime.parse(startTime, formatter);
|
|
|
+ }
|
|
|
+ LocalDateTime tomorrowMidnight = dateTime;
|
|
|
+ //判断是否是整点 如果是整点则不进行明天的零点操作
|
|
|
+ if(dateTime.getHour() != 0 || dateTime.getMinute() != 0 || dateTime.getSecond() != 0)
|
|
|
+ {
|
|
|
+ tomorrowMidnight = dateTime.toLocalDate().plusDays(1).atStartOfDay();
|
|
|
+ }
|
|
|
+ LocalDateTime end = tomorrowMidnight.plusYears(1L);
|
|
|
+ contractMain.setValidDate(DateTimeUtil.format(tomorrowMidnight, DateTimeUtil.DATETIME_PATTERN));
|
|
|
+ LocalDateTime localDateTime = end.minusSeconds(1L);
|
|
|
+ contractMain.setExpiryDate(DateTimeUtil.format(localDateTime, DateTimeUtil.DATETIME_PATTERN));
|
|
|
+ ciContract.setContractMain(contractMain);
|
|
|
+ insurePremiumRequest.setCiContract(ciContract);
|
|
|
+ }
|
|
|
+ if (a.contains("商业险险平台") && a.contains("重复投保")){
|
|
|
+ InsurePremiumRequest.BiContractDTO biContract = insurePremiumRequest.getBiContract();
|
|
|
+ InsurePremiumRequest.BiContractDTO.ContractMainDTO contractMain = biContract.getContractMain();
|
|
|
+ LocalDateTime dateTime = null;
|
|
|
+ if(a.contains("终保日期")){
|
|
|
+ String startTime = a.substring(a.indexOf("终保日期")+5,a.indexOf("终保日期")+21);
|
|
|
+ // 解析原始时间
|
|
|
+ dateTime = LocalDateTime.parse(startTime, formatter1);
|
|
|
+ }else{
|
|
|
+ String startTime = contractMain.getExpiryDate();
|
|
|
+ // 解析原始时间
|
|
|
+ dateTime = LocalDateTime.parse(startTime, formatter);
|
|
|
+ }
|
|
|
+ LocalDateTime tomorrowMidnight = dateTime;
|
|
|
+ //判断是否是整点 如果是整点则不进行明天的零点操作
|
|
|
+ if(dateTime.getHour() != 0 || dateTime.getMinute() != 0 || dateTime.getSecond() != 0)
|
|
|
+ {
|
|
|
+ tomorrowMidnight = dateTime.toLocalDate().plusDays(1).atStartOfDay();
|
|
|
+ }
|
|
|
+ LocalDateTime end = tomorrowMidnight.plusYears(1L);
|
|
|
+ contractMain.setValidDate(DateTimeUtil.format(tomorrowMidnight, DateTimeUtil.DATETIME_PATTERN));
|
|
|
+ LocalDateTime localDateTime = end.minusSeconds(1L);
|
|
|
+ contractMain.setExpiryDate(DateTimeUtil.format(localDateTime, DateTimeUtil.DATETIME_PATTERN));
|
|
|
+ biContract.setContractMain(contractMain);
|
|
|
+ insurePremiumRequest.setBiContract(biContract);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
private HttpResult<QuoteRespVo> responseOrder(InsurePremiumResponse insurePremiumResponse, QuoteRespVo quoteRespVo, PtlAgreementAttribution ptlAgreementAttribution, String orderId) {
|
|
|
// 保存订单信息
|
|
|
InsAreaCompany insAreaCompany = new InsAreaCompany(quoteRespVo, ptlAgreementAttribution);
|
|
|
@@ -205,7 +295,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
// 交强
|
|
|
if(Objects.nonNull(insurePremiumResponse.getCiContract())){
|
|
|
InsurePremiumResponse.CiContractDTO.ContractMainDTO ciContractMain = insurePremiumResponse.getCiContract().getContractMain();
|
|
|
- jqPremium = Double.parseDouble(ciContractMain.getTotalPremium());
|
|
|
+ jqPremium = ciContractMain.getTotalPremium();
|
|
|
quoteRespVo.setStartDateJq(ciContractMain.getValidDate());
|
|
|
quoteRespVo.setEndDateJq(ciContractMain.getExpiryDate());
|
|
|
//车船税
|
|
|
@@ -251,7 +341,7 @@ public class ChengTaiOrderApiServiceImpl implements ChengTaiOrderApiService {
|
|
|
CtKindCodeEnum ctKindCodeEnum = Enum.valueOf(CtKindCodeEnum.class, kindInfoVo.getKindCode());
|
|
|
InsurePremiumResponse.BiContractDTO.CoverageDTO coverageDTO = coverage.stream().filter(a -> a.getKindCode().equals(ctKindCodeEnum.getCode())).collect(Collectors.toList()).get(0);
|
|
|
kind.setAmount(coverageDTO.getAmount().doubleValue());
|
|
|
- kind.setCoveragePremium(Double.parseDouble(coverageDTO.getCoveragePremium()));
|
|
|
+ kind.setCoveragePremium(coverageDTO.getCoveragePremium());
|
|
|
kind.setUnitAmount(Objects.isNull(coverageDTO.getUnitAmount()) ? 0 : coverageDTO.getUnitAmount() );
|
|
|
kind.setServiceTimes(coverageDTO.getQuantity());
|
|
|
if (!ObjectUtils.isEmpty(kindInfoVo.getDeductibleRate())) {
|