Переглянути джерело

Merge branch 'master' into hlx

helixiao 1 рік тому
батько
коміт
19129e545c
10 змінених файлів з 1135 додано та 273 видалено
  1. 607 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerApplyApplicationRequestBuild.java
  2. 16 3
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerRequestComponent.java
  3. 4 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/po/AnShengCrawlerOrder.java
  4. 337 221
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerApplyApplicationRequest.java
  5. 7 2
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerCalculatePremiumApplyMessage.java
  6. 3 2
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerCalculatePremiumApplyResponse.java
  7. 48 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerRuleCheckForSimpleResponse.java
  8. 11 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerOrderService.java
  9. 13 0
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerOrderServiceImpl.java
  10. 89 45
      tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

+ 607 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/build/AnShengCrawlerApplyApplicationRequestBuild.java

@@ -0,0 +1,607 @@
+package com.jzg.quotation.ansheng.crawler.build;
+
+import cn.hutool.core.bean.copier.CopyOptions;
+import com.alibaba.fastjson.JSON;
+import com.google.common.collect.Lists;
+import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerApplyApplicationRequest;
+import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO.CheckVehicleInfoDTO;
+import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO.PolicyPricingDTO;
+import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO.VehicleTaxDTO;
+import com.jzg.quotation.ansheng.crawler.entity.request.AnShengCrawlerCalculatePremiumApplyMessage;
+import com.jzg.quotation.ansheng.crawler.entity.response.AnShengCrawlerCalculatePremiumApplyResponse;
+import com.jzg.quotation.ansheng.crawler.entity.response.AnShengCrawlerGetUserDetailResponse;
+import com.jzg.quotation.commons.utils.TimeProcessing;
+import org.jetbrains.annotations.NotNull;
+import org.springframework.util.ObjectUtils;
+import org.springframework.util.StringUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+public final class AnShengCrawlerApplyApplicationRequestBuild {
+
+    private AnShengCrawlerApplyApplicationRequestBuild() {
+        throw new IllegalStateException("Utility class");
+    }
+
+    public static AnShengCrawlerApplyApplicationRequest build(AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply, AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply, AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse, String compulsoryVersionNo) {
+        AnShengCrawlerApplyApplicationRequest autoSpecialPromiseRequest = new AnShengCrawlerApplyApplicationRequest();
+
+        Map<String, AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO> responseMap = calculatePremiumApply.getData()
+                .getContracts()
+                .stream()
+                .collect(Collectors.toMap(x -> x.getPolicyBase().getPlanCode(), x -> x));
+
+        // 拷贝报价请求数据
+        crawlerCalculatePremiumApply.getContracts().forEach(requestContracts -> {
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO contractsDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO();
+            AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO responseContracts = responseMap.get(requestContracts.getPolicyBase()
+                    .getPlanCode());
+
+            contractsDTO.setQuotationList(new ArrayList<>());
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.SaleBusinessSourceDTO saleBusinessSourceDTO = buildSaleBusinessSourceDTO(userDetailResponse);
+            contractsDTO.setSaleBusinessSource(saleBusinessSourceDTO);
+
+            String insuranerName = responseContracts.getPolicyBase().getInsuranerName();
+            AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyPersonsDTO.PersonnelInfoBaseDTO.PersonDTO personDTO = requestContracts.getPolicyPersons()
+                    .stream()
+                    .filter(x -> x.getPersonnelInfoBase().getPerson().getPersonnelName().equals(insuranerName))
+                    .findFirst()
+                    .map(x -> x.getPersonnelInfoBase().getPerson())
+                    .orElse(new AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyPersonsDTO.PersonnelInfoBaseDTO.PersonDTO());
+
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.BillInfoDetailDTO billInfoDetailDTO = buildBillInfoDetailDTO(insuranerName, personDTO.getMobileTelephone());
+            contractsDTO.setBillInfoDetail(billInfoDetailDTO);
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.BrandAutoModelDTO brandAutoModelDTO = buildBrandAutoModelDTO(responseContracts.getVehicle());
+            contractsDTO.setBrandAutoModel(brandAutoModelDTO);
+            contractsDTO.setSaleChannelSource(new AnShengCrawlerApplyApplicationRequest.ContractsDTO.SaleChannelSourceDTO(""));
+            contractsDTO.setUnderwriteInfos(List.of(new AnShengCrawlerApplyApplicationRequest.ContractsDTO.UnderwriteInfosDTO("1", "")));
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyExtendDTO policyExtendDTO = buildPolicyExtend(insuranerName, personDTO.getMobileTelephone());
+            contractsDTO.setPolicyExtend(policyExtendDTO);
+            // 险种信息
+            List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyCoveragesDTO> policyCoveragesDTO = buildPolicyCoveragesList(responseContracts.getPolicyCoverages(), requestContracts.getPolicyCoverages());
+            contractsDTO.setPolicyCoverages(policyCoveragesDTO);
+            // 车辆信息
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO targetListDTO = builldTargetListDTO(responseContracts.getTargets()
+                    .get(0), requestContracts.getTargetList().get(0));
+            contractsDTO.setTargetList(List.of(targetListDTO));
+
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyPaymentsDTO policyPaymentsDTO = buildPolicyPaymentsDTO(personDTO, responseContracts.getPolicyBase());
+            contractsDTO.setPolicyPayments(List.of(policyPaymentsDTO));
+            // 人员信息
+            contractsDTO.setPolicyPersons(requestContracts.getPolicyPersons());
+            // 费率因子
+            contractsDTO.setPolicyRatios(responseContracts.getPolicyRatios());
+            // 核心
+            AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyBaseDTO policyBaseDTO = buildPolicyBaseDTO(requestContracts.getPolicyBase(), responseContracts.getPolicyBase(), responseContracts.getTargets()
+                    .get(0), userDetailResponse, compulsoryVersionNo);
+            contractsDTO.setPolicyBase(policyBaseDTO);
+            autoSpecialPromiseRequest.getContracts().add(contractsDTO);
+        });
+
+        String insuranceBeginTime = calculatePremiumApply.getData().getContracts().get(0).getInsuranceBeginTime();
+
+        AnShengCrawlerApplyApplicationRequest.PolicySaleInfoDTO policySaleInfoDTO = buildPolicySaleInfoDTO(insuranceBeginTime);
+        autoSpecialPromiseRequest.setPolicySaleInfo(policySaleInfoDTO);
+        autoSpecialPromiseRequest.setAgentDefine(new AnShengCrawlerApplyApplicationRequest.AgentDefineDTO());
+        autoSpecialPromiseRequest.setCreatedBy(userDetailResponse.getUserId());
+        return autoSpecialPromiseRequest;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO builldTargetListDTO(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.TargetsDTO targetResponse,
+                                                                                                        AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.TargetListDTO targetRequest) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO targetListDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.TargetListDTO();
+        targetListDTO.setLinkId(targetRequest.getLinkId());
+        targetListDTO.setTargetId(targetRequest.getTargetId());
+        targetListDTO.setYmElecBatteryType(targetRequest.getYmElecBatteryType());
+        targetListDTO.setVehicleCertificateNo(targetRequest.getVehicleCertificateNo());
+        targetListDTO.setVehicleCertificateType(targetRequest.getVehicleCertificateType());
+        targetListDTO.setVehiclePurchasePrice(targetRequest.getVehiclePurchasePrice());
+        targetListDTO.setModelsListedYear(targetRequest.getModelsListedYear());
+        targetListDTO.setPlatformId(targetRequest.getPlatformId());
+        targetListDTO.setVehicleColor(targetRequest.getVehicleColor());
+        targetListDTO.setTheftproofEquipmentCode(targetRequest.getTheftproofEquipmentCode());
+        targetListDTO.setIsMortgage(targetRequest.getIsMortgage());
+        targetListDTO.setIsSpecialInsuranceVehicle(targetRequest.getIsSpecialInsuranceVehicle());
+        targetListDTO.setVehicleVer(targetRequest.getVehicleVer());
+        targetListDTO.setGroupCode(targetRequest.getGroupCode());
+        targetListDTO.setStandardName(targetRequest.getStandardName());
+        targetListDTO.setTradeName(targetRequest.getTradeName());
+        targetListDTO.setTradeCode(targetRequest.getTradeCode());
+        targetListDTO.setTotalVehicleWeight(targetRequest.getTotalVehicleWeight());
+        targetListDTO.setSeriesCode(targetRequest.getSeriesCode());
+        targetListDTO.setModelIdCode(targetRequest.getModelIdCode());
+        targetListDTO.setSeats(Integer.valueOf(targetRequest.getSeats()));
+        targetListDTO.setRbCode(targetRequest.getRbCode());
+        targetListDTO.setOtherEnergyTypeDesc(targetRequest.getOtherEnergyTypeDesc());
+        targetListDTO.setMadeDate(targetRequest.getMadeDate());
+        targetListDTO.setExhaustCapability(Double.valueOf(targetRequest.getExhaustCapability()));
+        targetListDTO.setNoDamageYears(targetRequest.getNoDamageYears());
+        targetListDTO.setSpecialVehicleFlag(targetRequest.getSpecialVehicleFlag());
+        targetListDTO.setOverseasVehicleFlag(targetRequest.getOverseasVehicleFlag());
+        targetListDTO.setBrand(targetRequest.getBrand());
+        targetListDTO.setModelCodeAlien(targetRequest.getModelCodeAlien());
+        targetListDTO.setCarNameAlien(targetRequest.getCarNameAlien());
+        targetListDTO.setTradeNameAlien(targetRequest.getTradeNameAlien());
+        targetListDTO.setBrandAlien(targetRequest.getBrandAlien());
+        targetListDTO.setDeptNameAlien(targetRequest.getDeptNameAlien());
+        // CheckVehicleInfoDTO
+        CheckVehicleInfoDTO checkVehicleInfoDTO = getCheckVehicleInfoDTO(targetRequest.getCheckVehicleInfo());
+        targetListDTO.setCheckVehicleInfo(checkVehicleInfoDTO);
+        targetListDTO.setDepartmentCode(targetRequest.getDepartmentCode());
+        targetListDTO.setDbVehicleType(targetRequest.getDbVehicleType());
+        targetListDTO.setVehicleLicenceCode(targetRequest.getVehicleLicenceCode());
+        targetListDTO.setVehicleFrameNo(targetRequest.getVehicleFrameNo());
+        targetListDTO.setEngineNo(targetRequest.getEngineNo());
+        targetListDTO.setFirstRegisterDate(targetRequest.getFirstRegisterDate());
+        targetListDTO.setFirstRegisterDateStr(targetRequest.getFirstRegisterDateStr());
+        targetListDTO.setVehicleCertificateDate(targetRequest.getVehicleCertificateDate());
+        targetListDTO.setWeigth(targetResponse.getWeigth());
+        targetListDTO.setTotalMass(targetResponse.getTotalMass());
+        targetListDTO.setPriceType(targetRequest.getPriceType());
+        targetListDTO.setPurchasePrice(targetRequest.getPurchasePrice());
+        targetListDTO.setVehicleLossInsuredValue(Double.valueOf(targetRequest.getVehicleLossInsuredValue()));
+        targetListDTO.setImportFlag(targetRequest.getImportFlag());
+        targetListDTO.setModelCode(targetRequest.getModelCode());
+        targetListDTO.setCarName(targetRequest.getCarName());
+        targetListDTO.setTheftProof(targetRequest.getTheftProof());
+        targetListDTO.setVehicleType(targetRequest.getVehicleType());
+        targetListDTO.setPureRange(targetRequest.getPureRange());
+        targetListDTO.setVehicleClass(targetRequest.getVehicleClass());
+        targetListDTO.setVehicleStyle(targetRequest.getVehicleStyle());
+        targetListDTO.setAutoModelCode(targetRequest.getAutoModelCode());
+        targetListDTO.setVehicleBrand(targetRequest.getVehicleBrand());
+        targetListDTO.setBrandChnName(targetRequest.getBrandChnName());
+        targetListDTO.setAverageMile(targetRequest.getAverageMile());
+        targetListDTO.setCsTradeName(targetRequest.getCsTradeName());
+        targetListDTO.setCsTradeCode(targetRequest.getCsTradeCode());
+        targetListDTO.setBrandCode(targetRequest.getBrandCode());
+        targetListDTO.setSeries(targetRequest.getSeries());
+        targetListDTO.setNoticeType(targetRequest.getNoticeType());
+        targetListDTO.setCategoryName(targetRequest.getCategoryName());
+        targetListDTO.setCategoryCode(targetRequest.getCategoryCode());
+        targetListDTO.setConfigType(targetRequest.getConfigType());
+        targetListDTO.setPartInfo(targetResponse.getPartInfo());
+        targetListDTO.setPowerType(targetRequest.getPowerType());
+        targetListDTO.setVehicleFgwCode(targetRequest.getVehicleFgwCode());
+        targetListDTO.setVehicleFgwName(targetRequest.getVehicleFgwName());
+        targetListDTO.setVehicleModelType(targetRequest.getVehicleModelType());
+        targetListDTO.setVehicleStyleDesc(targetRequest.getVehicleStyleDesc());
+        targetListDTO.setVehicleTypeName(targetRequest.getVehicleTypeName());
+        targetListDTO.setMakeDate(targetRequest.getMakeDate());
+        targetListDTO.setDetailDesc(targetRequest.getDetailDesc());
+        targetListDTO.setVehicleCategory(targetRequest.getVehicleCategory());
+        targetListDTO.setPersonnelName(targetRequest.getPersonnelName());
+        targetListDTO.setRefitDesc(targetRequest.getRefitDesc());
+        targetListDTO.setBasicRateCode(targetRequest.getBasicRateCode());
+        targetListDTO.setDeptName(targetRequest.getDeptName());
+        targetListDTO.setDeptCode(targetRequest.getDeptCode());
+        targetListDTO.setVehicleSeats(Integer.valueOf(targetRequest.getVehicleSeats()));
+        targetListDTO.setFuelType(targetRequest.getFuelType());
+        targetListDTO.setAutoModelChnName(targetRequest.getAutoModelChnName());
+        targetListDTO.setLicenceTypeCode(targetRequest.getLicenceTypeCode());
+        targetListDTO.setEcdemicVehicleFlag(targetRequest.getEcdemicVehicleFlag());
+        targetListDTO.setVehicleTonnages(Double.valueOf(targetRequest.getVehicleTonnages()));
+        targetListDTO.setPower(targetRequest.getPower());
+        targetListDTO.setMaxDesignSpeed(targetRequest.getMaxDesignSpeed());
+        targetListDTO.setRunCardCertificateDate(targetRequest.getRunCardCertificateDate());
+        targetListDTO.setCustomerNegotiatePrice(targetRequest.getCustomerNegotiatePrice());
+        targetListDTO.setOriginalCustomerNegotiatePrice(targetRequest.getOriginalCustomerNegotiatePrice());
+        targetListDTO.setFleetNo(targetRequest.getFleetNo());
+        targetListDTO.setMaker(targetRequest.getMaker());
+        targetListDTO.setApprovedCapacity(targetRequest.getApprovedCapacity());
+        targetListDTO.setIneffectualDate(targetRequest.getIneffectualDate());
+        targetListDTO.setLastCheckDate(targetRequest.getLastCheckDate());
+        targetListDTO.setRejectDate(targetRequest.getRejectDate());
+        targetListDTO.setRiskFlag(targetRequest.getRiskFlag());
+        targetListDTO.setTargetType(targetRequest.getTargetType());
+        targetListDTO.setFleetRate(targetRequest.getFleetRate());
+        targetListDTO.setUsageAttributeCode(targetResponse.getUsageAttributeCode());
+        targetListDTO.setUsageAttributeCodePM(targetRequest.getUsageAttributeCodePM());
+        targetListDTO.setOwnershipAttributeCode(targetRequest.getOwnershipAttributeCode());
+        targetListDTO.setBeneficiaryList(Lists.newArrayList());
+        targetListDTO.setCheckVehicleCodeSecret(targetRequest.getCheckVehicleCodeSecret());
+        // PolicyPricingDTO
+        PolicyPricingDTO policyPricingDTO = getPolicyPricingDTO(targetRequest.getPolicyPricing(), targetResponse.getPolicyPricing());
+        targetListDTO.setPolicyPricing(policyPricingDTO);
+        // VehicleTaxDTO
+        VehicleTaxDTO vehicleTaxDTO = getVehicleTaxDTO(targetRequest.getVehicleTax(), targetResponse.getVehicleTax());
+        targetListDTO.setVehicleTax(vehicleTaxDTO);
+
+        targetListDTO.setVehicleRegisterDate(TimeProcessing.dateTimeToDate(targetRequest.getFirstRegisterDate())
+                .replace("-", ""));
+        return targetListDTO;
+    }
+
+    private static VehicleTaxDTO getVehicleTaxDTO(AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.TargetListDTO.VehicleTaxDTO vehicleTaxRequest,
+                                                  AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.TargetsDTO.VehicleTaxDTO vehicleTaxResponse) {
+        VehicleTaxDTO vehicleTaxDTO = new VehicleTaxDTO();
+        vehicleTaxDTO.setOwnerName(vehicleTaxRequest.getOwnerName());
+        vehicleTaxDTO.setVehicleTaxAmount(vehicleTaxResponse.getVehicleTaxAmount());
+        vehicleTaxDTO.setDrivingLicenseAddress(vehicleTaxRequest.getDrivingLicenseAddress());
+        vehicleTaxDTO.setReplacesPaysTaxArea(vehicleTaxRequest.getReplacesPaysTaxArea());
+        vehicleTaxDTO.setAnnualTaxDue(vehicleTaxResponse.getAnnualTaxDue());
+        vehicleTaxDTO.setChangeDate(vehicleTaxRequest.getChangeDate());
+        vehicleTaxDTO.setTaxChangeReasonCodeAp(vehicleTaxRequest.getTaxChangeReasonCodeAp());
+        vehicleTaxDTO.setTaxChangeRensonDescAp(vehicleTaxRequest.getTaxChangeRensonDescAp());
+        vehicleTaxDTO.setTaxAmountFlag(vehicleTaxRequest.getTaxAmountFlag());
+        vehicleTaxDTO.setComputeNo(vehicleTaxRequest.getComputeNo());
+        vehicleTaxDTO.setLocalOrEcdemic(vehicleTaxRequest.getLocalOrEcdemic());
+        vehicleTaxDTO.setOldCarMark(vehicleTaxRequest.getOldCarMark());
+        vehicleTaxDTO.setBoroughAndCounty(vehicleTaxRequest.getBoroughAndCounty());
+        vehicleTaxDTO.setPersonTaxCode(vehicleTaxRequest.getPersonTaxCode());
+        vehicleTaxDTO.setSumAnnualTaxDue(vehicleTaxRequest.getSumAnnualTaxDue());
+        vehicleTaxDTO.setVehicleState(vehicleTaxRequest.getVehicleState());
+        vehicleTaxDTO.setPersonCert(vehicleTaxRequest.getPersonCert());
+        vehicleTaxDTO.setStartDate(vehicleTaxRequest.getStartDate());
+        vehicleTaxDTO.setEndDate(vehicleTaxRequest.getEndDate());
+        vehicleTaxDTO.setCertDepartmentName(vehicleTaxRequest.getCertDepartmentName());
+        vehicleTaxDTO.setSteerCardVehicleType(vehicleTaxRequest.getSteerCardVehicleType());
+        vehicleTaxDTO.setVehicleTaxAmountLast(vehicleTaxResponse.getVehicleTaxAmountLast());
+        vehicleTaxDTO.setPayTaxWay(vehicleTaxRequest.getPayTaxWay());
+        vehicleTaxDTO.setVehicleTaxAmountThis(vehicleTaxResponse.getVehicleTaxAmountThis());
+        vehicleTaxDTO.setVehicleTaxAmountThisCheck(vehicleTaxResponse.getVehicleTaxAmountThisCheck());
+        vehicleTaxDTO.setLateDay(vehicleTaxResponse.getLateDay());
+        vehicleTaxDTO.setLateFeeAmount(vehicleTaxResponse.getLateFeeAmount());
+        vehicleTaxDTO.setCalcTaxFlag(vehicleTaxResponse.getCalcTaxFlag());
+        vehicleTaxDTO.setCurrentTaxStartDate(vehicleTaxRequest.getCurrentTaxStartDate());
+        vehicleTaxDTO.setCurrentTaxEndDate(vehicleTaxRequest.getCurrentTaxEndDate());
+        vehicleTaxDTO.setCurrentTaxUnitTypeCode(vehicleTaxRequest.getCurrentTaxUnitTypeCode());
+        vehicleTaxDTO.setYearTax(vehicleTaxResponse.getYearTax());
+        vehicleTaxDTO.setCurrentUnitRate(vehicleTaxRequest.getCurrentUnitRate());
+        vehicleTaxDTO.setCertDepartmentCode(vehicleTaxRequest.getCertDepartmentCode());
+        return vehicleTaxDTO;
+    }
+
+    private static PolicyPricingDTO getPolicyPricingDTO(AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.TargetListDTO.PolicyPricingDTO policyPricingRequest,
+                                                        AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.TargetsDTO.PolicyPricingDTO policyPricingResponse) {
+        PolicyPricingDTO policyPricingDTO = new PolicyPricingDTO();
+        policyPricingDTO.setUsageAttributeCode(policyPricingRequest.getUsageAttributeCode());
+        policyPricingDTO.setUsageAttributeCodePM(policyPricingRequest.getUsageAttributeCodePM());
+        policyPricingDTO.setOwnershipAttributeCode(policyPricingRequest.getOwnershipAttributeCode());
+        policyPricingDTO.setNonclaimAdjust(policyPricingRequest.getNonclaimAdjust());
+        policyPricingDTO.setClaimAdjustLevel(policyPricingRequest.getClaimAdjustLevel());
+        policyPricingDTO.setPartInfo(policyPricingRequest.getPartInfo());
+        policyPricingDTO.setIsMortgage(policyPricingRequest.getIsMortgage());
+        policyPricingDTO.setIsSpecialInsuranceVehicle(policyPricingRequest.getIsSpecialInsuranceVehicle());
+        policyPricingDTO.setClaimRecordBizScoreSize(policyPricingRequest.getClaimRecordBizScoreSize());
+        policyPricingDTO.setLoanVehicleFlag(policyPricingRequest.getLoanVehicleFlag());
+        policyPricingDTO.setInjurySite(policyPricingRequest.getInjurySite());
+        policyPricingDTO.setTransferFlag(policyPricingRequest.getTransferFlag());
+        policyPricingDTO.setSearchSequenceNo(policyPricingRequest.getSearchSequenceNo());
+        policyPricingDTO.setDbVehicleAutoModelChnName(policyPricingRequest.getDbVehicleAutoModelChnName());
+        policyPricingDTO.setRefitDesc(policyPricingRequest.getRefitDesc());
+        policyPricingDTO.setLastYearIsTel(policyPricingRequest.getLastYearIsTel());
+        policyPricingDTO.setRatioFluctuateType(policyPricingRequest.getRatioFluctuateType());
+        policyPricingDTO.setRepairFactory(policyPricingRequest.getRepairFactory());
+        policyPricingDTO.setDbVehicleWeigth(policyPricingRequest.getDbVehicleWeigth());
+        policyPricingDTO.setRiskScore(policyPricingResponse.getRiskScore());
+        policyPricingDTO.setRiskScoreTwenty(policyPricingResponse.getRiskScoreTwenty());
+        policyPricingDTO.setAlgrId(policyPricingRequest.getAlgrId());
+        policyPricingDTO.setRiskScoreColor(policyPricingRequest.getRiskScoreColor());
+        policyPricingDTO.setScoreReason(policyPricingRequest.getScoreReason());
+        policyPricingDTO.setScoreReasonLevel(policyPricingRequest.getScoreReasonLevel());
+        policyPricingDTO.setScoreReasonLevel2(policyPricingRequest.getScoreReasonLevel2());
+        policyPricingDTO.setScoreReasonLevel3(policyPricingRequest.getScoreReasonLevel3());
+        policyPricingDTO.setHighRiskFlag(policyPricingRequest.getHighRiskFlag());
+        policyPricingDTO.setEffectReason(policyPricingRequest.getEffectReason());
+        policyPricingDTO.setDbVehicleVeiw(policyPricingRequest.getDbVehicleVeiw());
+        policyPricingDTO.setLastYearCompanyId(policyPricingRequest.getLastYearCompanyId());
+        policyPricingDTO.setChargeRateFinal(policyPricingRequest.getChargeRateFinal());
+        policyPricingDTO.setRateType(policyPricingRequest.getRateType());
+        policyPricingDTO.setPriceRises(policyPricingRequest.getPriceRises());
+        policyPricingDTO.setUnderWriteRate(policyPricingRequest.getUnderWriteRate());
+        policyPricingDTO.setAutoRuleRatioOD(policyPricingResponse.getAutoRuleRatioOD());
+        policyPricingDTO.setAutoRuleRatioTP(policyPricingResponse.getAutoRuleRatioTP());
+        policyPricingDTO.setAutoRuleRatioTHEFT(policyPricingResponse.getAutoRuleRatioTHEFT());
+        policyPricingDTO.setAutoRuleRatioOTHER(policyPricingResponse.getAutoRuleRatioOTHER());
+        policyPricingDTO.setUnderwriteRuleRatioOD(policyPricingRequest.getUnderwriteRuleRatioOD());
+        policyPricingDTO.setUnderwriteRuleRatioTP(policyPricingRequest.getUnderwriteRuleRatioTP());
+        policyPricingDTO.setUnderwriteRuleRatioTHEFT(policyPricingRequest.getUnderwriteRuleRatioTHEFT());
+        policyPricingDTO.setUnderwriteRuleRatioOTHER(policyPricingRequest.getUnderwriteRuleRatioOTHER());
+        policyPricingDTO.setTlType(policyPricingRequest.getTlType());
+        policyPricingDTO.setAutoFloatRatioOD(policyPricingRequest.getAutoFloatRatioOD());
+        policyPricingDTO.setAutoFloatRatioTp(policyPricingRequest.getAutoFloatRatioTp());
+        policyPricingDTO.setAutoFloatRatioTheft(policyPricingRequest.getAutoFloatRatioTheft());
+        policyPricingDTO.setAutoFloatRatioOther(policyPricingRequest.getAutoFloatRatioOther());
+        policyPricingDTO.setAppointAreaCode(policyPricingRequest.getAppointAreaCode());
+        policyPricingDTO.setFdConfigId(policyPricingRequest.getFdConfigId());
+        policyPricingDTO.setModelDiscount(policyPricingResponse.getModelDiscount());
+        policyPricingDTO.setAutoFloatHandingCost(policyPricingRequest.getAutoFloatHandingCost());
+        policyPricingDTO.setModelrate(policyPricingResponse.getModelrate());
+        policyPricingDTO.setDbVehicleBrand(policyPricingRequest.getDbVehicleBrand());
+        policyPricingDTO.setDbVehicleTypeName(policyPricingRequest.getDbVehicleTypeName());
+        policyPricingDTO.setUsageLicenceName(policyPricingRequest.getUsageLicenceName());
+        policyPricingDTO.setVehicleTypeChiName(policyPricingRequest.getVehicleTypeChiName());
+        policyPricingDTO.setAutoFloatTargetRebate(policyPricingRequest.getAutoFloatTargetRebate());
+        policyPricingDTO.setRiskFlag(policyPricingRequest.getRiskFlag());
+        policyPricingDTO.setDbExhaustCapability(policyPricingRequest.getDbExhaustCapability());
+        policyPricingDTO.setDbVehicleSeats(policyPricingRequest.getDbVehicleSeats());
+        policyPricingDTO.setDbVehicleTonnages(policyPricingRequest.getDbVehicleTonnages());
+        policyPricingDTO.setDbVehicleValue(policyPricingRequest.getDbVehicleValue());
+        policyPricingDTO.setIfModelRate(policyPricingRequest.getIfModelRate());
+        policyPricingDTO.setIsMotorcade(policyPricingRequest.getIsMotorcade());
+        policyPricingDTO.setScoreRunId(policyPricingResponse.getScoreRunId());
+        policyPricingDTO.setSpecialCarFlag(policyPricingRequest.getSpecialCarFlag());
+        policyPricingDTO.setTransferDate(policyPricingRequest.getTransferDate());
+        policyPricingDTO.setVehicleAlias(policyPricingRequest.getVehicleAlias());
+        policyPricingDTO.setClaimAdjustRatio(policyPricingResponse.getClaimAdjustRatio());
+        policyPricingDTO.setPeccancyAdjustRatio(policyPricingResponse.getPeccancyAdjustRatio());
+        policyPricingDTO.setRuleRatioOD(policyPricingResponse.getRuleRatioOD());
+        policyPricingDTO.setRuleRatioTP(policyPricingResponse.getRuleRatioTP());
+        policyPricingDTO.setRuleRatioTHEFT(policyPricingResponse.getRuleRatioTHEFT());
+        policyPricingDTO.setRuleRatioOTHER(policyPricingResponse.getRuleRatioOTHER());
+        return policyPricingDTO;
+    }
+
+    private static CheckVehicleInfoDTO getCheckVehicleInfoDTO(AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.TargetListDTO.CheckVehicleInfoDTO checkVehicleInfo) {
+        CheckVehicleInfoDTO checkVehicleInfoDTO = new CheckVehicleInfoDTO();
+        checkVehicleInfoDTO.setUsageAttributeCode(checkVehicleInfo.getUsageAttributeCode());
+        checkVehicleInfoDTO.setUsageAttributeCodePM(checkVehicleInfo.getUsageAttributeCodePM());
+        checkVehicleInfoDTO.setRunRegionCode(checkVehicleInfo.getRunRegionCode());
+        checkVehicleInfoDTO.setCheckVehicleFlag(checkVehicleInfo.getCheckVehicleFlag());
+        checkVehicleInfoDTO.setUploadCheckVehicleInfo(checkVehicleInfo.getUploadCheckVehicleInfo());
+        checkVehicleInfoDTO.setCheckVehicleSituation(checkVehicleInfo.getCheckVehicleSituation());
+        checkVehicleInfoDTO.setVehicleChecker(checkVehicleInfo.getVehicleChecker());
+        checkVehicleInfoDTO.setCheckRecord(checkVehicleInfo.getCheckRecord());
+        checkVehicleInfoDTO.setCheckTime(checkVehicleInfo.getCheckTime());
+        return checkVehicleInfoDTO;
+    }
+
+    private static List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyCoveragesDTO> buildPolicyCoveragesList(List<AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO> policyCoveragesResponse,
+                                                                                                                        List<AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyCoveragesDTO> policyCoveragesRequest) {
+        Map<String, AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO> policyCoveragesResponseMap = policyCoveragesResponse.stream()
+                .collect(Collectors.toMap(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO::getDutyCode, x -> x));
+        return policyCoveragesRequest.stream().map(policyCoveragesDTO -> {
+            AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO policyCoverages = policyCoveragesResponseMap.get(policyCoveragesDTO.getDutyCode());
+            return buildPolicyCoverages(policyCoverages, policyCoveragesDTO);
+        }).toList();
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyCoveragesDTO buildPolicyCoverages(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyCoveragesDTO policyCoveragesResponse,
+                                                                                                              AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyCoveragesDTO policyCoveragesDTORequest) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyCoveragesDTO policyCoveragesDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyCoveragesDTO();
+        policyCoveragesDTO.setDutyCode(policyCoveragesResponse.getDutyCode());
+        policyCoveragesDTO.setDutyChineseName(policyCoveragesResponse.getDutyChineseName());
+        policyCoveragesDTO.setInsuredAmount(policyCoveragesResponse.getInsuredAmount());
+        policyCoveragesDTO.setEquipmentInsureAmount(policyCoveragesDTORequest.getEquipmentInsureAmount());
+        policyCoveragesDTO.setPremiumRate(policyCoveragesDTORequest.getPremiumRate());
+        policyCoveragesDTO.setTotalActualPremium(policyCoveragesResponse.getTotalActualPremium());
+        policyCoveragesDTO.setDeductionRate(policyCoveragesDTORequest.getDeductionRate());
+        policyCoveragesDTO.setServiceNum(policyCoveragesDTORequest.getServiceNum());
+        policyCoveragesDTO.setIsTelpeson(policyCoveragesDTORequest.getIsTelpeson());
+        policyCoveragesDTO.setTelPhone(policyCoveragesDTORequest.getTelPhone());
+        policyCoveragesDTO.setMileage(policyCoveragesDTORequest.getMileage());
+        policyCoveragesDTO.setSetMeal(policyCoveragesDTORequest.getSetMeal());
+        policyCoveragesDTO.setFireMultiple(policyCoveragesDTORequest.getFireMultiple());
+        policyCoveragesDTO.setAllAmount(policyCoveragesResponse.getAllAmount());
+        policyCoveragesDTO.setRiskPremum(policyCoveragesResponse.getRiskPremum());
+        if(StringUtils.hasText(policyCoveragesDTORequest.getSeats())){
+            policyCoveragesDTO.setSeats(Integer.valueOf(policyCoveragesDTORequest.getSeats()));
+        }
+        policyCoveragesDTO.setDeductible(policyCoveragesDTORequest.getDeductible());
+        policyCoveragesDTO.setTotalStandardPremium(policyCoveragesResponse.getTotalStandardPremium());
+        policyCoveragesDTO.setAddedValueTax(policyCoveragesResponse.getAddedValueTax());
+        policyCoveragesDTO.setTotalAgreePremium(policyCoveragesResponse.getTotalAgreePremium());
+        policyCoveragesDTO.setTotalNetPremium(policyCoveragesResponse.getTotalNetPremium());
+        policyCoveragesDTO.setNewEquipmentList(Lists.newArrayList());
+        policyCoveragesDTO.setChargingPostDataList(Lists.newArrayList());
+        policyCoveragesDTO.setDieAmount(policyCoveragesDTORequest.getDieAmount());
+        policyCoveragesDTO.setMedicalAmount(policyCoveragesDTORequest.getMedicalAmount());
+        policyCoveragesDTO.setPropertyAmount(policyCoveragesDTORequest.getPropertyAmount());
+        policyCoveragesDTO.setNoFaultDieAmount(policyCoveragesDTORequest.getNoFaultDieAmount());
+        policyCoveragesDTO.setNoFaultMedicalAmount(policyCoveragesDTORequest.getNoFaultMedicalAmount());
+        policyCoveragesDTO.setNoFaultPropertyAmount(policyCoveragesDTORequest.getNoFaultPropertyAmount());
+        return policyCoveragesDTO;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyPaymentsDTO buildPolicyPaymentsDTO(AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyPersonsDTO.PersonnelInfoBaseDTO.PersonDTO personDTO,
+                                                                                                               AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyBaseDTO policyBaseDTO) {
+        String insuranceBeginTime = policyBaseDTO.getInsuranceBeginTime();
+        String beginDate = TimeProcessing.dateTimeToDate(insuranceBeginTime);
+        String endDate = TimeProcessing.plusDays(beginDate, 10);
+
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyPaymentsDTO policyPaymentsDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyPaymentsDTO();
+        policyPaymentsDTO.setPaymentPremiumTimes(1);
+        policyPaymentsDTO.setBankAccountNo("");
+        policyPaymentsDTO.setPrepaidPassword("");
+        policyPaymentsDTO.setNetAmount(policyBaseDTO.getTotalNetPremium());
+        policyPaymentsDTO.setTaxAmount(policyBaseDTO.getAddedValueTax());
+        policyPaymentsDTO.setPaymentEndDate(endDate);
+        policyPaymentsDTO.setPaymentPersonCode(personDTO.getPersonnelName());
+        policyPaymentsDTO.setPaymentPersonCertCode(personDTO.getCertificateNo());
+        policyPaymentsDTO.setFlatUnits("autotest");
+        policyPaymentsDTO.setAccountType("");
+        policyPaymentsDTO.setPaymentRate("100");
+        policyPaymentsDTO.setCheques("");
+        policyPaymentsDTO.setPaymentBeginDate(beginDate);
+        policyPaymentsDTO.setActualPremium(policyBaseDTO.getTotalActualPremium());
+        policyPaymentsDTO.setBankCode("");
+        policyPaymentsDTO.setPaymentMode("22");
+        policyPaymentsDTO.setApplicantAndPayerRelaType("");
+        policyPaymentsDTO.setJiangSuRemark("");
+        return policyPaymentsDTO;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyBaseDTO buildPolicyBaseDTO(AnShengCrawlerCalculatePremiumApplyMessage.ContractsDTO.PolicyBaseDTO requestPolicyBase,
+                                                                                                       AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.PolicyBaseDTO responsePolicyBase,
+                                                                                                       AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.TargetsDTO targetsDTO,
+                                                                                                       AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse,
+                                                                                                       String compulsoryVersionNo) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyBaseDTO policyBaseDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyBaseDTO();
+        policyBaseDTO.setDepartmentLevelCode("12001");
+        policyBaseDTO.setSalesGroupCode(requestPolicyBase.getSalesGroupCode());
+        policyBaseDTO.setSalesGroupName(requestPolicyBase.getSalesGroupName());
+        policyBaseDTO.setRenewType(requestPolicyBase.getRenewType());
+        policyBaseDTO.setApproveName(requestPolicyBase.getApproveName());
+        policyBaseDTO.setApproveCode(requestPolicyBase.getApproveCode());
+        policyBaseDTO.setMainVersionNo(compulsoryVersionNo);
+        policyBaseDTO.setRiskScore(targetsDTO.getPolicyPricing().getRiskScore());
+        policyBaseDTO.setRateScale(responsePolicyBase.getRateScale());
+        policyBaseDTO.setCommissionRateUpper(responsePolicyBase.getCommissionRateUpper());
+        policyBaseDTO.setCompanyCommissionRateUpper(responsePolicyBase.getCompanyCommissionRateUpper());
+        policyBaseDTO.setCommissionChargeProportion(responsePolicyBase.getCommissionChargeProportion());
+        policyBaseDTO.setTotalActualSumPremium(responsePolicyBase.getTotalActualSumPremium());
+        policyBaseDTO.setInputByName(userDetailResponse.getAgentNamePrint());
+        policyBaseDTO.setInputBy(userDetailResponse.getUserId());
+        policyBaseDTO.setTransfer("");
+        policyBaseDTO.setApplyType("");
+        policyBaseDTO.setDataSource("");
+        policyBaseDTO.setPolicySource("P");
+        policyBaseDTO.setAgentCode(userDetailResponse.getAgentCode());
+        policyBaseDTO.setAgentLevelCode(userDetailResponse.getAgentLevelCode());
+        policyBaseDTO.setServiceNetCar(requestPolicyBase.getServiceNetCar());
+        policyBaseDTO.setClaimRecordBizScoreSize("");
+        policyBaseDTO.setBatchNo("");
+        policyBaseDTO.setPrimaryInsuranceClause("");
+        policyBaseDTO.setArbitrationCommission(requestPolicyBase.getArbitrationCommission());
+        policyBaseDTO.setForcePolicyFlag("");
+        policyBaseDTO.setCertificationPrintNo("");
+        policyBaseDTO.setRelationPolicy(requestPolicyBase.getRelationPolicy());
+        policyBaseDTO.setCedingTypeCode(requestPolicyBase.getBusinessType());
+        policyBaseDTO.setOneToMoreGoodCustomer("");
+        policyBaseDTO.setLastVehicleLicenceCode("");
+        policyBaseDTO.setLastGoodCustomer("");
+        policyBaseDTO.setGoodCustomer("");
+        policyBaseDTO.setPolicyNo("");
+        policyBaseDTO.setEndorseApplyNo("");
+        policyBaseDTO.setEndorseNo("");
+        policyBaseDTO.setTotalNetPremium(responsePolicyBase.getTotalNetPremium());
+        policyBaseDTO.setAddedValueTax(responsePolicyBase.getAddedValueTax());
+        policyBaseDTO.setRealBusinessType("");
+        policyBaseDTO.setBusinessType("");
+        policyBaseDTO.setVehicleLicenceCode(targetsDTO.getVehicleLicenceCode());
+        policyBaseDTO.setVehicleFrameNo(targetsDTO.getVehicleFrameNo());
+        policyBaseDTO.setEngineNo(targetsDTO.getEngineNo());
+        policyBaseDTO.setVehicleTonnages(String.valueOf(targetsDTO.getVehicleTonnages()));
+        policyBaseDTO.setVehicleSeats(String.valueOf(targetsDTO.getVehicleSeats()));
+        policyBaseDTO.setBusinessTypeDetail(requestPolicyBase.getBusinessTypeDetail());
+        policyBaseDTO.setInsuranceBeginTime(requestPolicyBase.getInsuranceBeginTime());
+        policyBaseDTO.setInsuranceEndTime(requestPolicyBase.getInsuranceEndTime());
+        policyBaseDTO.setPlanCode(requestPolicyBase.getPlanCode());
+        policyBaseDTO.setProductCode(requestPolicyBase.getProductCode());
+        policyBaseDTO.setDepartmentCode(requestPolicyBase.getDepartmentCode());
+        policyBaseDTO.setTargetType(requestPolicyBase.getTargetType());
+        policyBaseDTO.setFixedSpecialPromise("");
+        policyBaseDTO.setAgentPersonCode("");
+        policyBaseDTO.setAgentPersonName(requestPolicyBase.getAgentPersonName());
+        policyBaseDTO.setAgentRatioDate("");
+        policyBaseDTO.setAlterableSpecialPromise("");
+        policyBaseDTO.setRatioTHEFTSum("");
+        policyBaseDTO.setApplyPolicyNo("");
+        policyBaseDTO.setAgentRatioDegree("");
+        policyBaseDTO.setAppointAreaCode("");
+        policyBaseDTO.setKeyOverServer(responsePolicyBase.getKeyOverServer());
+        policyBaseDTO.setEPolicyPDFTime("1");
+        policyBaseDTO.setRatioOTHERSum("");
+        policyBaseDTO.setDisputedSettleMode("0");
+        policyBaseDTO.setProfessionalNo("");
+        policyBaseDTO.setPolicyScoreDecisionWay("2");
+        policyBaseDTO.setShortTimeCoefficient(String.valueOf(requestPolicyBase.getShortTimeCoefficient()));
+        policyBaseDTO.setKeyOverServerSY("");
+        policyBaseDTO.setChargeRateId("");
+        policyBaseDTO.setRatioTPSum("");
+        policyBaseDTO.setTotalStandardPremium(responsePolicyBase.getTotalStandardPremium());
+        policyBaseDTO.setTemporaryId("");
+        policyBaseDTO.setTotalActualPremium(responsePolicyBase.getTotalActualPremium());
+        policyBaseDTO.setRateParamPrintState("");
+        policyBaseDTO.setCreatedBy(userDetailResponse.getUserId());
+        policyBaseDTO.setRatioODSum("");
+        policyBaseDTO.setCurrencyCode(requestPolicyBase.getCurrencyCode());
+        policyBaseDTO.setSignTime("");
+        policyBaseDTO.setQuoteTaskNo(responsePolicyBase.getQuoteTaskNo());
+        policyBaseDTO.setApplyQueryPlatformID(responsePolicyBase.getApplyQueryPlatformID());
+        policyBaseDTO.setApplyQueryCode(responsePolicyBase.getApplyQueryCode());
+        policyBaseDTO.setPremiumCountDataToken(responsePolicyBase.getPremiumCountDataToken());
+        policyBaseDTO.setIsHaveFee("1");
+        policyBaseDTO.setTotalAgreePremium(responsePolicyBase.getTotalAgreePremium());
+        policyBaseDTO.setGroupFlag(requestPolicyBase.getGroupFlag());
+        return policyBaseDTO;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.PolicySaleInfoDTO buildPolicySaleInfoDTO(String dateTime) {
+        AnShengCrawlerApplyApplicationRequest.PolicySaleInfoDTO policySaleInfoDTO = new AnShengCrawlerApplyApplicationRequest.PolicySaleInfoDTO();
+        policySaleInfoDTO.setApplicantCode("");
+        policySaleInfoDTO.setApplyTime(dateTime);
+        policySaleInfoDTO.setCurrencyCode("01");
+        policySaleInfoDTO.setDataSource("");
+        policySaleInfoDTO.setRelationshipWithInsured("1");
+        policySaleInfoDTO.setSaleNo("");
+        policySaleInfoDTO.setSaleSchedule("");
+        policySaleInfoDTO.setSecrecyLevel("");
+        policySaleInfoDTO.setSignTime(dateTime);
+        policySaleInfoDTO.setSpecialPromise("");
+        return policySaleInfoDTO;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyExtendDTO buildPolicyExtend(String insuranerName, String phone) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyExtendDTO policyExtend = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyExtendDTO();
+        policyExtend.setOrderNumber("");
+        policyExtend.setRiskSharingBusinessType("1");
+        policyExtend.setSaleCompany("");
+        policyExtend.setSaleAreaCode("");
+        policyExtend.setSale4SFlag("");
+        policyExtend.setIssueChannel("5");
+        policyExtend.setUsageAttributeCode("1");
+        policyExtend.setRunRegionCode("");
+        policyExtend.setBrand("");
+        policyExtend.setInsuranceVehicleRelationship("1");
+        policyExtend.setUsageAttributeCodePM("");
+        policyExtend.setAvgMile("");
+        policyExtend.setContacts(insuranerName);
+        policyExtend.setContactInformation(phone);
+        policyExtend.setDeliveryTime("");
+        policyExtend.setDeliveryProvinceCode("-0");
+        policyExtend.setDeliveryCityCode("-0");
+        policyExtend.setDeliveryCountyCode("-0");
+        policyExtend.setDeliveryAddress("");
+        policyExtend.setCustomerName("");
+        policyExtend.setTargetPremium("");
+        return policyExtend;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.BrandAutoModelDTO buildBrandAutoModelDTO(AnShengCrawlerCalculatePremiumApplyResponse.DataDTO.ContractsDTO.VehicleDTO vehicle) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.BrandAutoModelDTO brandAutoModelDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.BrandAutoModelDTO();
+        brandAutoModelDTO.setModelDesc(vehicle.getDetailDesc());
+        brandAutoModelDTO.setStandardName(vehicle.getStandardName());
+        brandAutoModelDTO.setVehicleAlias("");
+        return brandAutoModelDTO;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.BillInfoDetailDTO buildBillInfoDetailDTO(String insuranerName, String phone) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.BillInfoDetailDTO billInfoDetailDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.BillInfoDetailDTO();
+        billInfoDetailDTO.setBillPersonType("1");
+        billInfoDetailDTO.setBillCertNo("");
+        billInfoDetailDTO.setIsBusinessBill("0");
+        billInfoDetailDTO.setBillMobilePhone("");
+        billInfoDetailDTO.setBillCertType("");
+        billInfoDetailDTO.setBillType("5");
+        billInfoDetailDTO.setBillEmail("");
+        billInfoDetailDTO.setBillTaxPayerType("0");
+        billInfoDetailDTO.setBillPersonName(insuranerName);
+        billInfoDetailDTO.setBillBankAccount("");
+        billInfoDetailDTO.setBillApplantPhoneNo(phone);
+        return billInfoDetailDTO;
+    }
+
+    private static AnShengCrawlerApplyApplicationRequest.ContractsDTO.SaleBusinessSourceDTO buildSaleBusinessSourceDTO(AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse) {
+        AnShengCrawlerApplyApplicationRequest.ContractsDTO.SaleBusinessSourceDTO saleBusinessSourceDTO = new AnShengCrawlerApplyApplicationRequest.ContractsDTO.SaleBusinessSourceDTO();
+        saleBusinessSourceDTO.setSaleAgentName(userDetailResponse.getRealName());
+        saleBusinessSourceDTO.setSaleGroupCode(userDetailResponse.getSaleTeamCode());
+        saleBusinessSourceDTO.setSalesGroupCode("");
+        saleBusinessSourceDTO.setSaleGroupName(userDetailResponse.getSaleTeamName());
+        saleBusinessSourceDTO.setSalesGroupName("");
+        saleBusinessSourceDTO.setBusinessSourceCode(userDetailResponse.getAgentCharactor());
+        saleBusinessSourceDTO.setBusinessSourceDetailCode(userDetailResponse.getAgentCharactorGeneral());
+        saleBusinessSourceDTO.setAssistantCode("");
+        saleBusinessSourceDTO.setAssistant("");
+        saleBusinessSourceDTO.setRealSaleName("");
+        saleBusinessSourceDTO.setSaleAgentCode(userDetailResponse.getSaleAgentCode());
+        saleBusinessSourceDTO.setCustomerSource("");
+        return saleBusinessSourceDTO;
+    }
+
+
+}

+ 16 - 3
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/component/AnShengCrawlerRequestComponent.java

@@ -209,6 +209,17 @@ public class AnShengCrawlerRequestComponent {
         return post(RequestUrl.AUTO_SPECIAL_PROMISE, request, AnShengCrawlerAutoSpecialPromiseResponse.class, headers);
     }
 
+    /**
+     * 规则校验
+     *
+     * @param request 报价请求
+     * @param headers 请求头
+     * @return 报价返回信息
+     */
+    public AnShengCrawlerRuleCheckForSimpleResponse principiumRuleCheckForSimple(AnShengCrawlerApplyApplicationRequest request, HttpHeaders headers) {
+        return post(RequestUrl.RULE_CHECK_FOR_SIMPLE, request, AnShengCrawlerRuleCheckForSimpleResponse.class, headers);
+    }
+
     /**
      * 提交核保
      *
@@ -280,10 +291,12 @@ public class AnShengCrawlerRequestComponent {
      * @param headers 请求头
      * @return 支付链接
      */
-    public AnShengCrawlerPaymentResponse payment(AnShengCrawlerPaymentRequest request, HttpHeaders headers) {
-        MultiValueMap<String, Object> multiValueMap = RequestObjectConversion.convertMultiValueMap(request);
+    public String payment(AnShengCrawlerPaymentRequest request, HttpHeaders headers) {
         ResponseEntity<AnShengCrawlerPaymentResponse> responseEntity = requestComponent.formData(RequestUrl.PAYMENT.getRequestUrl(anShengCrawlerProperties.getUrl()), request, AnShengCrawlerPaymentResponse.class, headers);
-        return responseEntity.getBody();
+        return Optional.ofNullable(responseEntity.getBody())
+                .map(AnShengCrawlerPaymentResponse::getData)
+                .map(AnShengCrawlerPaymentResponse.DataDTO::getFxQRCode)
+                .orElseThrow(()->new SystemException("支付链接获取失败"));
     }
 
     /**

+ 4 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/po/AnShengCrawlerOrder.java

@@ -43,6 +43,10 @@ public class AnShengCrawlerOrder {
      * 商业险保单号
      */
     private String biPolicyNo;
+    /**
+     * 总保费
+     */
+    private String totalPremium;
     /**
      * 录单时间
      */

Різницю між файлами не показано, бо вона завелика
+ 337 - 221
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerApplyApplicationRequest.java


+ 7 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/request/AnShengCrawlerCalculatePremiumApplyMessage.java

@@ -144,6 +144,11 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
             this.policyCoverages.add(policyCoveragesDTO);
         }
 
+        public static void main(String[] args) {
+            Integer i = Integer.valueOf("");
+            System.out.println(i);
+        }
+
         public void addBusinessInsurance(List<KindInfoVo> kindInfoVo) {
             for (KindInfoVo kind : kindInfoVo) {
                 PolicyCoveragesDTO policyCoveragesDTO = new PolicyCoveragesDTO(kind);
@@ -1075,7 +1080,7 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
                 private String fdConfigId;
                 @JsonProperty("modelDiscount")
                 @JSONField(name = "modelDiscount")
-                private String modelDiscount;
+                private Double modelDiscount;
                 @JsonProperty("autoFloatHandingCost")
                 @JSONField(name = "autoFloatHandingCost")
                 private Integer autoFloatHandingCost;
@@ -1193,7 +1198,7 @@ public class AnShengCrawlerCalculatePremiumApplyMessage {
                     this.autoFloatRatioOther = "";
                     this.appointAreaCode = "";
                     this.fdConfigId = "";
-                    this.modelDiscount = "";
+                    this.modelDiscount = 0D;
                     this.autoFloatHandingCost = 0;
                     this.modelrate = "";
                     this.advicediscount = "";

+ 3 - 2
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerCalculatePremiumApplyResponse.java

@@ -20,6 +20,7 @@ public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializabl
     @JsonProperty("simpleMessage")
     private String simpleMessage;
     @JsonProperty("message")
+
     private String message;
     @JsonProperty("data")
     private DataDTO data;
@@ -177,7 +178,7 @@ public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializabl
                 @JsonProperty("totalNetPremium")
                 private Double totalNetPremium;
                 @JsonProperty("totalActualSumPremium")
-                private Integer totalActualSumPremium;
+                private Double totalActualSumPremium;
                 @JsonProperty("addedValueTax")
                 private Double addedValueTax;
                 @JsonProperty("rateScale")
@@ -1341,7 +1342,7 @@ public class AnShengCrawlerCalculatePremiumApplyResponse  implements Serializabl
                 @JsonProperty("noFaultPropertyAmount")
                 private Integer noFaultPropertyAmount;
                 @JsonProperty("allAmount")
-                private Integer allAmount;
+                private Double allAmount;
                 @JsonProperty("insuredAmount")
                 private Integer insuredAmount;
                 @JsonProperty("totalStandardPremium")

+ 48 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/entity/response/AnShengCrawlerRuleCheckForSimpleResponse.java

@@ -0,0 +1,48 @@
+package com.jzg.quotation.ansheng.crawler.entity.response;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+@NoArgsConstructor
+@Data
+public class AnShengCrawlerRuleCheckForSimpleResponse implements Serializable, AnShengCrawlerBaseResponse{
+
+    @Serial
+    private static final long serialVersionUID = 1162205989279231219L;
+
+    @JsonProperty("code")
+    private Integer code;
+
+    @JsonProperty("simpleMessage")
+    private String simpleMessage;
+
+    @JsonProperty("message")
+    private String message;
+
+    @JsonProperty("data")
+    private List<DataDTO> data;
+
+    @NoArgsConstructor
+    @Data
+    public static class DataDTO {
+        @JsonProperty("firstTrialShortMsg")
+        private String firstTrialShortMsg;
+        @JsonProperty("businessInsure")
+        private Boolean businessInsure;
+        @JsonProperty("compulsoryInsure")
+        private Boolean compulsoryInsure;
+        @JsonProperty("firstTrialMsg")
+        private String firstTrialMsg;
+        @JsonProperty("firstTrialPass")
+        private Boolean firstTrialPass;
+        @JsonProperty("planCode")
+        private String planCode;
+        @JsonProperty("firstTrialTaskNo")
+        private String firstTrialTaskNo;
+    }
+}

+ 11 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/AnShengCrawlerOrderService.java

@@ -12,4 +12,15 @@ public interface AnShengCrawlerOrderService {
      */
     AnShengCrawlerOrder getById(String ordersNo);
 
+    /**
+     * 保存订单号
+     * @param id 订单号
+     */
+    void saveRecordingTime(String id);
+
+    /**
+     * 保存订单
+     * @param anShengCrawlerOrder 订单信息
+     */
+    void saveAnShengCrawlerOrder(AnShengCrawlerOrder anShengCrawlerOrder);
 }

+ 13 - 0
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerOrderServiceImpl.java

@@ -4,6 +4,7 @@ package com.jzg.quotation.ansheng.crawler.service.impl;
 import com.jzg.quotation.ansheng.crawler.entity.po.AnShengCrawlerOrder;
 import com.jzg.quotation.ansheng.crawler.repository.AnShengCrawlerOrderRepository;
 import com.jzg.quotation.ansheng.crawler.service.AnShengCrawlerOrderService;
+import com.jzg.quotation.commons.utils.TimeProcessing;
 import lombok.RequiredArgsConstructor;
 import org.springframework.stereotype.Service;
 
@@ -18,5 +19,17 @@ public class  AnShengCrawlerOrderServiceImpl implements AnShengCrawlerOrderServi
         return anShengCrawlerOrderRepository.getById(ordersNo);
     }
 
+    @Override
+    public void saveRecordingTime(String id){
+        AnShengCrawlerOrder anShengCrawlerOrder = new AnShengCrawlerOrder();
+        anShengCrawlerOrder.setId(id);
+        anShengCrawlerOrder.setRecordingTime(TimeProcessing.nowDateTime());
+        anShengCrawlerOrderRepository.save(anShengCrawlerOrder);
+    }
+
+    @Override
+    public void saveAnShengCrawlerOrder(AnShengCrawlerOrder anShengCrawlerOrder){
+        anShengCrawlerOrderRepository.save(anShengCrawlerOrder);
+    }
 
 }

+ 89 - 45
tenant/insurance/quotation-ansheng/src/main/java/com/jzg/quotation/ansheng/crawler/service/impl/AnShengCrawlerRequestImpl.java

@@ -1,10 +1,9 @@
 package com.jzg.quotation.ansheng.crawler.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.bean.copier.CopyOptions;
 import com.jzg.commons.entity.quote.vo.QuoteVo;
 import com.jzg.commons.entity.quote.vo.aggregated.*;
 import com.jzg.commons.entity.quote.vo.base.LoginBase;
+import com.jzg.quotation.ansheng.crawler.build.AnShengCrawlerApplyApplicationRequestBuild;
 import com.jzg.quotation.ansheng.crawler.build.AnShengCrawlerQuoteResultsVoBuild;
 import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerCacheComponent;
 import com.jzg.quotation.ansheng.crawler.component.AnShengCrawlerRequestComponent;
@@ -22,7 +21,6 @@ import com.jzg.quotation.commons.constant.InsuranceCode;
 import com.jzg.quotation.commons.filter.CarModelsFilterUtils;
 import lombok.RequiredArgsConstructor;
 import org.springframework.http.HttpHeaders;
-import org.springframework.util.ObjectUtils;
 import org.springframework.util.StringUtils;
 
 import java.util.ArrayList;
@@ -45,14 +43,6 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
 
     private final AnShengCrawlerQuoteProcessService anShengCrawlerQuoteProcessService;
 
-    private static final CopyOptions COPY_OPTIONS = CopyOptions.create().setPropertiesFilter((x, y) -> {
-        if (x.getType() == String.class && !StringUtils.hasLength((String) y)) {
-            return false;
-        }
-        return !ObjectUtils.isEmpty(y);
-    });
-
-
     @Override
     public void login(LoginBase loginBase) {
         anShengCrawlerLoginService.login(loginBase.getUsername(), loginBase.getPassword());
@@ -78,6 +68,7 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         AnShengCrawlerInsureAddRequest anShengCrawlerInsureAddRequest = new AnShengCrawlerInsureAddRequest("1", userDetailResponse.getDepartmentCode(), departmentPlanCode.getCode(), departmentPlanCode.getProductCode());
         AnShengCrawlerInsureAddResponse.DataDTO insureAdd = anShengCrawlerRequestComponent.insureAdd(anShengCrawlerInsureAddRequest, httpHeaders);
         String checkVehicleCode = insureAdd.getCheckVehicleCode();
+        String compulsoryVersionNo = insureAdd.getMainVersionNoMap().getCompulsoryVersionNo();
         String checkVehicleCodeSecretGenerate = CheckVehicleCodeSecretGenerateUtils.getCheckVehicleCodeSecretGenerate(checkVehicleCode, userDetailResponse.getUserId());
 
         // 车架号查询
@@ -88,63 +79,116 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         AnShengCrawlerCalculatePremiumApplyMessage crawlerCalculatePremiumApply = new AnShengCrawlerCalculatePremiumApplyMessage(quoteVo, dataDTO, userDetailResponse, departmentPlanCode, checkVehicleCodeSecretGenerate);
         AnShengCrawlerCalculatePremiumApplyResponse calculatePremiumApply = anShengCrawlerRequestComponent.calculatePremiumApply(crawlerCalculatePremiumApply, httpHeaders);
         // 缓存报价信息
-        AnShengCrawlerApplyApplicationRequest autoSpecialPromiseRequest = new AnShengCrawlerApplyApplicationRequest();
-        // 拷贝结果数据
-        BeanUtil.copyProperties(calculatePremiumApply, autoSpecialPromiseRequest, COPY_OPTIONS);
+        AnShengCrawlerApplyApplicationRequest autoSpecialPromiseRequest = AnShengCrawlerApplyApplicationRequestBuild.build(crawlerCalculatePremiumApply, calculatePremiumApply, userDetailResponse, compulsoryVersionNo);
 
         // 缓存数据
         anShengCrawlerCacheComponent.cacheQuoteRequest(ordersNo, autoSpecialPromiseRequest);
+        anShengCrawlerOrderService.saveRecordingTime(ordersNo);
         // 构造返回参数
         return AnShengCrawlerQuoteResultsVoBuild.buildQuoteResultsVo(ordersNo, quoteVo, calculatePremiumApply);
     }
 
     @Override
     public UnderwritingResultsVo underwriting(UnderwritingVo underwritingVo) {
-        String ordersNo = underwritingVo.getOrder().getOrdersNo();
+        final String ordersNo = underwritingVo.getOrder().getOrdersNo();
+
         // 获取报价信息
         AnShengCrawlerApplyApplicationRequest applicationRequest = anShengCrawlerCacheComponent.getQuoteResponse(ordersNo);
         // 获取图片上传信息
         List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyAttachmentsDTO> imagesInfo = anShengCrawlerCacheComponent.getImagesInfo(underwritingVo.getOrder()
                 .getOrdersNo());
-
+        // 请求头
         HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(underwritingVo.getOrder()
                 .getAttributionInformationVo());
         // 获取特别约定
         AnShengCrawlerAutoSpecialPromiseResponse autoSpecialPromiseResponse = anShengCrawlerRequestComponent.autoSpecialPromise(applicationRequest, httpHeaders);
+        // 核保规则
+        AnShengCrawlerRuleCheckForSimpleResponse anShengCrawlerApplyApplicationResponse = anShengCrawlerRequestComponent.principiumRuleCheckForSimple(applicationRequest, httpHeaders);
         Map<String, AnShengCrawlerAutoSpecialPromiseResponse.DataDTO> stringDataDTOMap = autoSpecialPromiseResponse.getData()
                 .stream()
                 .collect(Collectors.toMap(AnShengCrawlerAutoSpecialPromiseResponse.DataDTO::getPlanCode, x -> x));
-
+        Map<String, AnShengCrawlerRuleCheckForSimpleResponse.DataDTO> ruleCheckForSimpleData = anShengCrawlerApplyApplicationResponse.getData()
+                .stream()
+                .collect(Collectors.toMap(AnShengCrawlerRuleCheckForSimpleResponse.DataDTO::getPlanCode, x -> x));
+        // 核保加入上传的影像、特别约定信息
         applicationRequest.getContracts().forEach(contract -> {
-            AnShengCrawlerAutoSpecialPromiseResponse.DataDTO dataDTO = stringDataDTOMap.get(contract.getPolicyBase()
+            // 特别约定
+            AnShengCrawlerAutoSpecialPromiseResponse.DataDTO promiseData = stringDataDTOMap.get(contract.getPolicyBase()
                     .getPlanCode());
-            contract.getPolicyBase().setAlterableSpecialPromise(dataDTO.getAlterableSpecialPromise());
+            // 核保规则
+            AnShengCrawlerRuleCheckForSimpleResponse.DataDTO simpleData = ruleCheckForSimpleData.get(contract.getPolicyBase()
+                    .getPlanCode());
+            contract.getPolicyBase().setAlterableSpecialPromise(promiseData.getAlterableSpecialPromise());
             contract.setPolicyAttachments(imagesInfo);
+            contract.getPolicyBase().setFirstTrialTaskNo(simpleData.getFirstTrialTaskNo());
         });
-
+        // 核保
         AnShengCrawlerApplyApplicationResponse applyApplicationResponse = anShengCrawlerRequestComponent.applyApplication(applicationRequest, httpHeaders);
+        // 投保订单号保存
+        saveThePolicyNumber(ordersNo, applyApplicationResponse);
         return null;
     }
 
+    /**
+     * 保存投保单号
+     * @param ordersNo 订单号
+     * @param applyApplicationResponse 核保信息
+     */
+    private void saveThePolicyNumber(String ordersNo, AnShengCrawlerApplyApplicationResponse applyApplicationResponse) {
+        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(ordersNo);
+        List<AnShengCrawlerOrder.NiInfo> niInfoList = new ArrayList<>();
+        Optional.ofNullable(applyApplicationResponse.getData())
+                .orElse(new ArrayList<>())
+                .forEach(dataDTO -> {
+                    // 交强险
+                    if (DepartmentPlanCode.PLAN_105.getCode().equals(dataDTO.getPlanCode())) {
+                        anShengCrawlerOrder.setCiPolicyNo(dataDTO.getApplyPolicyNo());
+                        // 商业险
+                    } else if (DepartmentPlanCode.PLAN_109.getCode()
+                            .equals(dataDTO.getPlanCode()) || DepartmentPlanCode.PLAN_113.getCode()
+                            .equals(dataDTO.getPlanCode())) {
+                        anShengCrawlerOrder.setBiPolicyNo(dataDTO.getApplyPolicyNo());
+                    }
+                    AnShengCrawlerOrder.NiInfo niInfo = new AnShengCrawlerOrder.NiInfo();
+                    niInfo.setNiPolicyNo(dataDTO.getApplyPolicyNo());
+                    niInfoList.add(niInfo);
+                });
+        anShengCrawlerOrder.setNiInfos(niInfoList);
+        anShengCrawlerOrderService.saveAnShengCrawlerOrder(anShengCrawlerOrder);
+    }
 
     @Override
     public PaymentLinkResultsVo getPaymentLink(PaymentLinkVo paymentLinkVo) {
+        // 请求头
         HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(paymentLinkVo.getOrder()
-                .getAttributionInformationVo()
-        );
-
-        AnShengCrawlerPaymentRequest anShengCrawlerPaymentRequest = new AnShengCrawlerPaymentRequest();
-        anShengCrawlerRequestComponent.payment(anShengCrawlerPaymentRequest, httpHeaders);
-        return null;
+                .getAttributionInformationVo());
+        // 归属信息
+        AnShengCrawlerGetUserDetailResponse.DataDTO.AgentDefineDTO userDetailResponse = anShengCrawlerQuoteProcessService.getUserDetailResponse(paymentLinkVo.getOrder()
+                .getAgreementId(), httpHeaders);
+        AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(paymentLinkVo.getOrder()
+                .getOrdersNo());
+        // 获取投保单号
+        List<String> ciPolicyNo = new ArrayList<>(List.of(anShengCrawlerOrder.getCiPolicyNumber(), anShengCrawlerOrder.getBiPolicyNumber()));
+        List<String> collect = Optional.ofNullable(anShengCrawlerOrder.getNiInfos())
+                .orElse(new ArrayList<>())
+                .stream()
+                .map(AnShengCrawlerOrder.NiInfo::getNiPolicyNumber)
+                .toList();
+        ciPolicyNo.addAll(collect);
+        List<String> list = ciPolicyNo.stream().filter(StringUtils::hasText).toList();
+        // 获取支付链接
+        AnShengCrawlerPaymentRequest anShengCrawlerPaymentRequest = new AnShengCrawlerPaymentRequest(list, userDetailResponse.getDepartmentCode(), anShengCrawlerOrder.getTotalPremium());
+        String paymentUrl = anShengCrawlerRequestComponent.payment(anShengCrawlerPaymentRequest, httpHeaders);
+        return new PaymentLinkResultsVo(true, paymentUrl, "");
     }
 
     @Override
     public void uploadImage(InsuranceUploadImageVo insuranceUploadImageVo) {
         // 请求头信息
         HttpHeaders httpHeaders = anShengCrawlerQuoteProcessService.getHttpHeaders(insuranceUploadImageVo.getOrder()
-                .getAttributionInformationVo()
-        );
+                .getAttributionInformationVo());
 
+        // 单个上传影像
         List<AnShengCrawlerFileUploadResponse.DataDTO> dataDTOS = new ArrayList<>();
         insuranceUploadImageVo.getImageVoList().forEach(image -> {
             AnShengCrawlerFileUploadRequest anShengCrawlerFileUploadRequest = new AnShengCrawlerFileUploadRequest(image.getInsuranceImageType(), image.getInsuranceImageCode());
@@ -158,6 +202,7 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
             return;
         }
 
+        // 缓存影像信息
         List<AnShengCrawlerApplyApplicationRequest.ContractsDTO.PolicyAttachmentsDTO> policyAttachmentsDTOList = AnShengCrawlerFileUploadResponse.toPolicyAttachmentsDTOList(dataDTOS);
         anShengCrawlerCacheComponent.cacheImagesInfo(insuranceUploadImageVo.getOrder()
                 .getOrdersNo(), policyAttachmentsDTOList);
@@ -172,26 +217,25 @@ public class AnShengCrawlerRequestImpl implements AnShengCrawlerRequest {
         AnShengCrawlerOrder anShengCrawlerOrder = anShengCrawlerOrderService.getById(downloadPolicyVo.getOrder()
                 .getOrdersNo());
 
-        Optional.ofNullable(anShengCrawlerOrder.getCiPolicyNo())
-                .ifPresent(policyNo -> {
-                    AnShengCrawlerQueryPrintPdfRequest queryPrintPdfCi = new AnShengCrawlerQueryPrintPdfRequest(policyNo, "6");
-                    downloadPolicyResultVo.setJqUrl(anShengCrawlerRequestComponent.queryPrintPdf(queryPrintPdfCi, httpHeaders));
+        // 交强保单和标志
+        Optional.ofNullable(anShengCrawlerOrder.getCiPolicyNo()).ifPresent(policyNo -> {
+            AnShengCrawlerQueryPrintPdfRequest queryPrintPdfCi = new AnShengCrawlerQueryPrintPdfRequest(policyNo, "6");
+            downloadPolicyResultVo.setJqUrl(anShengCrawlerRequestComponent.queryPrintPdf(queryPrintPdfCi, httpHeaders));
 
-                    AnShengCrawlerQueryPrintPdfRequest queryPrintPdfCiBz = new AnShengCrawlerQueryPrintPdfRequest(policyNo, "2");
-                    downloadPolicyResultVo.setJqFlagUrl(anShengCrawlerRequestComponent.queryPrintPdf(queryPrintPdfCiBz, httpHeaders));
-                });
-
-        Optional.ofNullable(anShengCrawlerOrder.getBiPolicyNo())
-                .ifPresent(policyNo -> {
-                    AnShengCrawlerQueryPrintPdfRequest queryPrintPdfCi = new AnShengCrawlerQueryPrintPdfRequest(policyNo, "6");
-                    downloadPolicyResultVo.setSyUrl(anShengCrawlerRequestComponent.queryPrintPdf(queryPrintPdfCi, httpHeaders));
-                });
+            AnShengCrawlerQueryPrintPdfRequest queryPrintPdfCiBz = new AnShengCrawlerQueryPrintPdfRequest(policyNo, "2");
+            downloadPolicyResultVo.setJqFlagUrl(anShengCrawlerRequestComponent.queryPrintPdf(queryPrintPdfCiBz, httpHeaders));
+        });
+        // 商业保单和标志
+        Optional.ofNullable(anShengCrawlerOrder.getBiPolicyNo()).ifPresent(policyNo -> {
+            AnShengCrawlerQueryPrintPdfRequest queryPrintPdfCi = new AnShengCrawlerQueryPrintPdfRequest(policyNo, "6");
+            downloadPolicyResultVo.setSyUrl(anShengCrawlerRequestComponent.queryPrintPdf(queryPrintPdfCi, httpHeaders));
+        });
 
+        // 非车保单和标志
         anShengCrawlerOrder.getNiInfos().forEach(niInfo -> {
-            Optional.ofNullable(niInfo.getNiPolicyNumber())
-                    .ifPresent(policyNo -> {
-                        anShengCrawlerRequestComponent.downloadPdf( policyNo, httpHeaders);
-                    });
+            Optional.ofNullable(niInfo.getNiPolicyNumber()).ifPresent(policyNo -> {
+                anShengCrawlerRequestComponent.downloadPdf(policyNo, httpHeaders);
+            });
         });
         return null;
     }

Деякі файли не було показано, через те що забагато файлів було змінено