|
|
@@ -0,0 +1,812 @@
|
|
|
+package com.jzg.quote.huatai.api.entity.request;
|
|
|
+
|
|
|
+import cn.hutool.core.util.ArrayUtil;
|
|
|
+import com.alibaba.fastjson.annotation.JSONField;
|
|
|
+import com.jzg.commons.constants.InsuranceRisk;
|
|
|
+import com.jzg.quotation.commons.constant.InsuranceTypeCorrespondence;
|
|
|
+import com.jzg.quotation.commons.entity.vo.aggregated.QuoteVo;
|
|
|
+import com.jzg.quotation.commons.entity.vo.quote.*;
|
|
|
+import com.jzg.quote.huatai.api.constant.HuaTaiBaseCode;
|
|
|
+import com.jzg.quote.huatai.api.constant.HuaTaiTransCode;
|
|
|
+import com.jzg.quote.huatai.api.constant.TimeConstants;
|
|
|
+import com.jzg.quote.huatai.api.constant.enums.ContractEnum;
|
|
|
+import com.jzg.quote.huatai.api.constant.enums.MotorTypeCode;
|
|
|
+import com.jzg.quote.huatai.api.constant.enums.MotorUsageTypeCode;
|
|
|
+import com.jzg.quote.huatai.api.entity.HuaTaiBaseRequestHead;
|
|
|
+import com.jzg.quote.huatai.api.entity.HuaTaiConfigureParameters;
|
|
|
+import com.jzg.quote.huatai.api.entity.response.HuaTaiActualValueResponse;
|
|
|
+import com.jzg.quote.huatai.api.entity.response.HuaTaiModelsQueryResponse;
|
|
|
+import lombok.AllArgsConstructor;
|
|
|
+import lombok.Data;
|
|
|
+import lombok.EqualsAndHashCode;
|
|
|
+import lombok.NoArgsConstructor;
|
|
|
+
|
|
|
+import java.io.Serial;
|
|
|
+import java.io.Serializable;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalDateTime;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.*;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description: todo
|
|
|
+ * @author: shenwd
|
|
|
+ * @date: 2025/3/10 11:37
|
|
|
+ **/
|
|
|
+@EqualsAndHashCode(callSuper = true)
|
|
|
+@NoArgsConstructor
|
|
|
+@Data
|
|
|
+public class HuaTaiQuotedPriceRequest extends HuaTaiBaseRequest {
|
|
|
+
|
|
|
+ @Serial
|
|
|
+ private static final long serialVersionUID = -7598037304369799704L;
|
|
|
+
|
|
|
+ //Y 投保单信息
|
|
|
+ @JSONField(name = "businessData")
|
|
|
+ private BusinessDataDto businessData;
|
|
|
+
|
|
|
+ public HuaTaiQuotedPriceRequest(QuoteVo quoteVo, HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto,
|
|
|
+ HuaTaiActualValueResponse actualValueResponse, AccidentalDrivingVo accidentalDrivingVo,
|
|
|
+ HuaTaiConfigureParameters huaTaiConfigureParameters) {
|
|
|
+ this.businessData = new BusinessDataDto(quoteVo, fullCarDataDto, actualValueResponse, accidentalDrivingVo,
|
|
|
+ huaTaiConfigureParameters);
|
|
|
+ this.loginCom = huaTaiConfigureParameters.getComCode();
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void setHead(HuaTaiBaseRequestHead head) {
|
|
|
+ super.setHead(head);
|
|
|
+ super.getHead().setTransCode(HuaTaiTransCode.QUOTE_PRICE);
|
|
|
+ }
|
|
|
+
|
|
|
+ //Y 机构代码
|
|
|
+ @JSONField(name = "loginCom")
|
|
|
+ private String loginCom;
|
|
|
+
|
|
|
+ @AllArgsConstructor
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class BusinessDataDto implements Serializable {
|
|
|
+
|
|
|
+ @Serial
|
|
|
+ private static final long serialVersionUID = -7919877849492707702L;
|
|
|
+
|
|
|
+ //Y 投保主信息
|
|
|
+ @JSONField(name = "businessMain")
|
|
|
+ private BusinessMainDto businessMain;
|
|
|
+ //Y 业务信息(列表)
|
|
|
+ @JSONField(name = "contract")
|
|
|
+ private List<ContractDto> contract;
|
|
|
+ //Y 客户信息(列表)
|
|
|
+ @JSONField(name = "customer")
|
|
|
+ private List<CustomerDto> customer;
|
|
|
+ //Y 投保车辆信息
|
|
|
+ @JSONField(name = "insuredObject")
|
|
|
+ private InsuredObjectDto insuredObject;
|
|
|
+ //Y 销售信息
|
|
|
+ @JSONField(name = "saleInfo")
|
|
|
+ private SaleInfoDto saleInfo;
|
|
|
+
|
|
|
+ public BusinessDataDto(QuoteVo quoteVo, HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto,
|
|
|
+ HuaTaiActualValueResponse actualValueResponse, AccidentalDrivingVo accidentalDrivingVo,
|
|
|
+ HuaTaiConfigureParameters huaTaiConfigureParameters) {
|
|
|
+ CarInfoVo carInfo = quoteVo.getCarInfoVo();
|
|
|
+ List<KindInfoVo> kindList = quoteVo.getKindInfoVo();
|
|
|
+ VehicleAndVesselTaxVo vesselTax = quoteVo.getVehicleAndVesselTax();
|
|
|
+ CustomerInfoVo ownerInfo = quoteVo.getOwnersInfo();
|
|
|
+ CustomerInfoVo policyHolderInfo = quoteVo.getPolicyHolderInfo();
|
|
|
+ CustomerInfoVo insuredPersonInfo = quoteVo.getInsuredPersonInfo();
|
|
|
+ int i = Integer.parseInt(carInfo.getSeatCount());
|
|
|
+ // 保单归属地
|
|
|
+ this.businessMain = new BusinessMainDto(huaTaiConfigureParameters);
|
|
|
+ // 车辆信息
|
|
|
+ this.insuredObject = new InsuredObjectDto(carInfo, fullCarDataDto);
|
|
|
+ // 保险信息
|
|
|
+ this.contract = new ContractDto().getContract(quoteVo, kindList, i - 1, vesselTax, actualValueResponse,
|
|
|
+ huaTaiConfigureParameters, fullCarDataDto);
|
|
|
+ // 客户信息
|
|
|
+ this.customer = new CustomerDto().getCustomers(ownerInfo, policyHolderInfo, insuredPersonInfo);
|
|
|
+ //销售信息
|
|
|
+ this.saleInfo = new SaleInfoDto(huaTaiConfigureParameters);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class BusinessMainDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = 2471155101522896774L;
|
|
|
+ //Y 操作机构代码
|
|
|
+ @JSONField(name = "makeCom")
|
|
|
+ private String makeCom;
|
|
|
+ //Y 操作员代码
|
|
|
+ @JSONField(name = "operatorCode")
|
|
|
+ private String operatorCode;
|
|
|
+ //Y 投保日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "operateDate")
|
|
|
+ private String operateDate;
|
|
|
+ //CY 出单计算机IP地址(北京出单机构必传)
|
|
|
+ @JSONField(name = "computerIp")
|
|
|
+ private String computerIp;
|
|
|
+
|
|
|
+ public BusinessMainDto(HuaTaiConfigureParameters huaTaiConfigureParameters) {
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ this.makeCom = huaTaiConfigureParameters.getComCode();
|
|
|
+ this.operatorCode = huaTaiConfigureParameters.getOperatorCode();
|
|
|
+ this.operateDate = df.format(new Date());
|
|
|
+ }
|
|
|
+
|
|
|
+ public void setOperate() {
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ this.operateDate = df.format(new Date());
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class InsuredObjectDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = 8289493908102574837L;
|
|
|
+ //Y 保险采集和管理车信息
|
|
|
+ @JSONField(name = "policyCar")
|
|
|
+ private PolicyCarDto policyCar;
|
|
|
+ //Y 简化版精友信息
|
|
|
+ @JSONField(name = "simpleStadarCar")
|
|
|
+ private SimpleStadarCarDto simpleStadarCar;
|
|
|
+
|
|
|
+ @JSONField(name = "platformCar")
|
|
|
+ private PlatformCarDto platformCar;
|
|
|
+
|
|
|
+
|
|
|
+ public InsuredObjectDto(CarInfoVo carInfo, HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto) {
|
|
|
+ this.policyCar = new PolicyCarDto(carInfo, fullCarDataDto);
|
|
|
+ this.simpleStadarCar = new SimpleStadarCarDto(carInfo, fullCarDataDto);
|
|
|
+ this.platformCar = new PlatformCarDto();
|
|
|
+ }
|
|
|
+
|
|
|
+ @AllArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class PlatformCarDto implements Serializable {
|
|
|
+
|
|
|
+ private static final long serialVersionUID = -7496687235740494863L;
|
|
|
+
|
|
|
+ @JSONField(name = "searchSequenceNo")
|
|
|
+ private String searchSequenceNo;
|
|
|
+
|
|
|
+ public PlatformCarDto() {
|
|
|
+ this.searchSequenceNo = "";
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class PolicyCarDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = -435073301215297662L;
|
|
|
+ //CY 座位数
|
|
|
+ @JSONField(name = "approvedPassengersCapacity")
|
|
|
+ private int approvedPassengersCapacity;
|
|
|
+ //Y 排量(单位:升)
|
|
|
+ @JSONField(name = "displacement")
|
|
|
+ private double displacement;
|
|
|
+ //Y 车牌号
|
|
|
+ @JSONField(name = "plateNo")
|
|
|
+ private String plateNo;
|
|
|
+ //Y 初次登记日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "registerDate")
|
|
|
+ private String registerDate;
|
|
|
+ //Y 行驶证发证日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "issueDate")
|
|
|
+ private String issueDate;
|
|
|
+ //Y 新车购置价
|
|
|
+ @JSONField(name = "purchasePrice")
|
|
|
+ private String purchasePrice;
|
|
|
+ //Y 港澳车标志(false-非港澳车;true-是港澳车)
|
|
|
+ @JSONField(name = "hKFlag")
|
|
|
+ private boolean hKFlag;
|
|
|
+ //Y 发动机号
|
|
|
+ @JSONField(name = "engine")
|
|
|
+ private String engine;
|
|
|
+ //Y 外地车标志(false-本地车;true-外地车)
|
|
|
+ @JSONField(name = "ecdemicVehicleFlag")
|
|
|
+ private boolean ecdemicVehicleFlag;
|
|
|
+ //Y 商业险过户车标志(0-非过户车;1-过户重新投保)
|
|
|
+ @JSONField(name = "chgOwnerFlag")
|
|
|
+ private String chgOwnerFlag;
|
|
|
+ //Y 交强险过户车标志(1-过户重新投保,非过户车传空即可)
|
|
|
+ @JSONField(name = "specialCarFlag")
|
|
|
+ private String specialCarFlag;
|
|
|
+ //CY 过户日期(过户车必传)(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "transferDate")
|
|
|
+ private String transferDate;
|
|
|
+ //Y 车架号
|
|
|
+ @JSONField(name = "vIN")
|
|
|
+ private String vin;
|
|
|
+ //Y 是否贷款购车标志(0-非贷款车;1-是贷款车)
|
|
|
+ @JSONField(name = "loanStatus")
|
|
|
+ private String loanStatus;
|
|
|
+ //Y 厂牌型号
|
|
|
+ @JSONField(name = "modelName")
|
|
|
+ private String modelName;
|
|
|
+ //CY 整备质量
|
|
|
+ @JSONField(name = "UnladenMass")
|
|
|
+ private String unladenMass;
|
|
|
+ //Y 能源种类
|
|
|
+ @JSONField(name = "FullType")
|
|
|
+ private String FullType;
|
|
|
+ //CY 车辆来历凭证种类(新车,北京上海机构出单必录)
|
|
|
+ @JSONField(name = "CertificateType")
|
|
|
+ private String CertificateType;
|
|
|
+ //CY 车辆来历凭证编号(新车,北京机构出单必录)
|
|
|
+ @JSONField(name = "CertificateNo")
|
|
|
+ private String CertificateNo;
|
|
|
+ //CY 车辆来历凭证所载日期(新车,北京机构出单必录)(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "CertificateDate")
|
|
|
+ private String CertificateDate;
|
|
|
+ //CY 参见车辆种类代码
|
|
|
+ @JSONField(name = "MotorTypeCode")
|
|
|
+ private String motorTypeCode;
|
|
|
+ //CY 参见使用性质代码
|
|
|
+ @JSONField(name = "MotorUsageTypeCode")
|
|
|
+ private String motorUsageTypeCode;
|
|
|
+ //CY 参见号牌种类代码
|
|
|
+ @JSONField(name = "PlateType")
|
|
|
+ private String plateType;
|
|
|
+ //CY 功率(纯电摩托车必录)
|
|
|
+ @JSONField(name = "Power")
|
|
|
+ private String Power;
|
|
|
+ //CY 最高设计车速(摩托车必录)
|
|
|
+ @JSONField(name = "MaximumSpeed")
|
|
|
+ private String MaximumSpeed;
|
|
|
+ //CY 参见所属性质代码
|
|
|
+ @JSONField(name = "Property")
|
|
|
+ private String property;
|
|
|
+ //CY 新车销售公司名称(广东机构新车出单必录)
|
|
|
+ @JSONField(name = "NewCarSalesCompanyName")
|
|
|
+ private String NewCarSalesCompanyName;
|
|
|
+ //CY 销售公司所在省(广东机构出单新车必录)
|
|
|
+ @JSONField(name = "NewCarSalesProvince")
|
|
|
+ private String NewCarSalesProvince;
|
|
|
+ //CY 销售公司所在市(广东机构出单新车必录)
|
|
|
+ @JSONField(name = "NewCarSalesCity")
|
|
|
+ private String NewCarSalesCity;
|
|
|
+ //CY 销售公司所在区(广东机构出单新车必录)
|
|
|
+ @JSONField(name = "NewCarSalesDistrict")
|
|
|
+ private String NewCarSalesDistrict;
|
|
|
+ //CY 是否4S店销售(广东机构出单新车必录)
|
|
|
+ @JSONField(name = "IsFourSShop")
|
|
|
+ private String IsFourSShop;
|
|
|
+ //CY 购车发票日期(上海机构出单必录)(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "InvoiceDate")
|
|
|
+ private Date InvoiceDate;
|
|
|
+ //CY 参见车身颜色代码
|
|
|
+ @JSONField(name = "ColorCode")
|
|
|
+ private String colorCode;
|
|
|
+ //CY 验车状态代码(1-未验车;2-免验车;4-已验车)
|
|
|
+ @JSONField(name = "CarCheckStatus")
|
|
|
+ private String carCheckStatus;
|
|
|
+ //CY 验车人(已验车必录)
|
|
|
+ @JSONField(name = "CarChecker")
|
|
|
+ private String carChecker;
|
|
|
+ //CY 验车时间(已验车必录)(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "CarCheckTime")
|
|
|
+ private String carCheckTime;
|
|
|
+ //CY 验车记录(已验车必录)
|
|
|
+ @JSONField(name = "CarCheckRecord")
|
|
|
+ private String carCheckRecord;
|
|
|
+ //CY 车况(0-好;1-中;2-差)
|
|
|
+ @JSONField(name = "VehicleCondition")
|
|
|
+ private String vehicleCondition;
|
|
|
+ //Y 参见交管车辆类型代码
|
|
|
+ @JSONField(name = "VehicleType")
|
|
|
+ private String vehicleType;
|
|
|
+ //CY 行驶证车型
|
|
|
+ @JSONField(name = "RegistModelCode")
|
|
|
+ private String registModelCode;
|
|
|
+ //CY 参见号牌底色代码
|
|
|
+ @JSONField(name = "PlateColorCode")
|
|
|
+ private String plateColorCode;
|
|
|
+
|
|
|
+ public PolicyCarDto(CarInfoVo carInfoVo, HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto) {
|
|
|
+ this.approvedPassengersCapacity = Integer.parseInt(carInfoVo.getSeatCount());
|
|
|
+ if (fullCarDataDto.getDisplacement() != 0) {
|
|
|
+ this.displacement = fullCarDataDto.getDisplacement();
|
|
|
+ } else {
|
|
|
+ this.displacement = Double.parseDouble(carInfoVo.getDisplacement());
|
|
|
+ }
|
|
|
+// this.displacement = fullCarDataDto.getDisplacement();
|
|
|
+ this.plateNo = carInfoVo.getLicenseNo();
|
|
|
+ this.registerDate = carInfoVo.getRegisterDate() + " " + TimeConstants.START_TIME;
|
|
|
+ this.issueDate = carInfoVo.getIssueDate() + " " + TimeConstants.START_TIME;
|
|
|
+ this.purchasePrice = String.valueOf(fullCarDataDto.getPurchasePrice());
|
|
|
+ this.hKFlag = false;
|
|
|
+ this.engine = carInfoVo.getEngineNo();
|
|
|
+ this.ecdemicVehicleFlag = false;
|
|
|
+ if (carInfoVo.isTransfer()) {
|
|
|
+ this.specialCarFlag = "1";
|
|
|
+ this.transferDate = carInfoVo.getTransferDate() + " " + TimeConstants.START_TIME;
|
|
|
+ } else {
|
|
|
+ this.specialCarFlag = "";
|
|
|
+ }
|
|
|
+ this.Power = carInfoVo.getPowerScale();
|
|
|
+ if (carInfoVo.isTransfer()) {
|
|
|
+ this.chgOwnerFlag = "1";
|
|
|
+ this.transferDate = carInfoVo.getTransferDate() + " " + TimeConstants.START_TIME;
|
|
|
+ } else {
|
|
|
+ this.chgOwnerFlag = "0";
|
|
|
+ }
|
|
|
+
|
|
|
+ this.vin = carInfoVo.getVinNo();
|
|
|
+ this.loanStatus = "0";
|
|
|
+ this.modelName = fullCarDataDto.getModelName();
|
|
|
+ this.unladenMass = carInfoVo.getCompleteKerbMass();
|
|
|
+ this.FullType = fullCarDataDto.getEnergyTypes();
|
|
|
+
|
|
|
+ MotorUsageTypeCode usageTypeCode = Enum.valueOf(MotorUsageTypeCode.class,
|
|
|
+ MotorUsageTypeCode.TITLE + carInfoVo.getVehicleUseCode());
|
|
|
+ this.motorUsageTypeCode = usageTypeCode.getCode();
|
|
|
+
|
|
|
+ MotorTypeCode motorTypeCode1 = Enum.valueOf(MotorTypeCode.class, MotorTypeCode.TITLE + carInfoVo.getCarKindCode());
|
|
|
+ this.motorTypeCode = motorTypeCode1.getCode();
|
|
|
+
|
|
|
+ this.plateType = "02";
|
|
|
+ this.property = "04";
|
|
|
+ this.colorCode = null;
|
|
|
+ this.carCheckStatus = "2";
|
|
|
+ this.vehicleCondition = "0";
|
|
|
+ this.vehicleType = carInfoVo.getCarTypeCode();
|
|
|
+ this.registModelCode = fullCarDataDto.getModelName();
|
|
|
+ this.plateColorCode = "01";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class SimpleStadarCarDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = 1260421320708015158L;
|
|
|
+ //Y 行业车型编码
|
|
|
+ @JSONField(name = "modelCode")
|
|
|
+ private String modelCode;
|
|
|
+ //Y 座位数
|
|
|
+ @JSONField(name = "approvedPassengersCapacity")
|
|
|
+ private int approvedPassengersCapacity;
|
|
|
+ //Y 精友车型编码
|
|
|
+ @JSONField(name = "localModelCode")
|
|
|
+ private String localModelCode;
|
|
|
+ //Y 参见能源种类代码
|
|
|
+ @JSONField(name = "energyTypes")
|
|
|
+ private String energyTypes;
|
|
|
+
|
|
|
+ public SimpleStadarCarDto(CarInfoVo carInfoVo, HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto) {
|
|
|
+
|
|
|
+ this.modelCode = fullCarDataDto.getModelCode();
|
|
|
+ this.approvedPassengersCapacity = fullCarDataDto.getApprovedPassengersCapacity();
|
|
|
+ if (carInfoVo.getSeatCount() != null) {
|
|
|
+ this.approvedPassengersCapacity = Integer.parseInt(carInfoVo.getSeatCount());
|
|
|
+ }
|
|
|
+ this.localModelCode = fullCarDataDto.getLocalModelCode();
|
|
|
+ this.energyTypes = fullCarDataDto.getEnergyTypes();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class SaleInfoDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = -8717559068867090498L;
|
|
|
+ //Y 代理人代码
|
|
|
+ @JSONField(name = "agentCode")
|
|
|
+ private String agentCode;
|
|
|
+ //Y 代理协议编码
|
|
|
+ @JSONField(name = "agreementNo")
|
|
|
+ private String agreementNo;
|
|
|
+ //Y 机构代码
|
|
|
+ @JSONField(name = "comCode")
|
|
|
+ private String comCode;
|
|
|
+ //Y 活动ID(通过活动查询接口获得)
|
|
|
+ @JSONField(name = "promoteSalePlanID")
|
|
|
+ private String promoteSalePlanID;
|
|
|
+
|
|
|
+ public SaleInfoDto(HuaTaiConfigureParameters huaTaiConfigureParameters) {
|
|
|
+ this.agentCode = huaTaiConfigureParameters.getAgentCode();
|
|
|
+ this.agreementNo = huaTaiConfigureParameters.getAgreementNo();
|
|
|
+ this.comCode = huaTaiConfigureParameters.getComCode();
|
|
|
+ this.promoteSalePlanID = "";//后期需维护
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @AllArgsConstructor
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class ContractDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = -8141574495483504299L;
|
|
|
+ //Y 业务主信息
|
|
|
+ @JSONField(name = "contractMain")
|
|
|
+ private ContractMainDto contractMain;
|
|
|
+ //Y 投保险别列表
|
|
|
+ @JSONField(name = "coverage")
|
|
|
+ private List<CoverageDto> coverage;
|
|
|
+ //Y 平台交互信息
|
|
|
+ @JSONField(name = "platFormMessage")
|
|
|
+ private PlatFormMessageDto platFormMessage;
|
|
|
+ //CY 车船税信息(交强险节点下传值)
|
|
|
+ @JSONField(name = "tax")
|
|
|
+ private TaxDto tax;
|
|
|
+ //CY 充电桩信息(列表)
|
|
|
+ @JSONField(name = "ChargingPost")
|
|
|
+ private List<ChargingPostDto> chargingPost;
|
|
|
+
|
|
|
+ public List<ContractDto> getContract(QuoteVo quoteVo, List<KindInfoVo> kindInfoVos, Integer quantity,
|
|
|
+ VehicleAndVesselTaxVo vesselTax, HuaTaiActualValueResponse actualValueResponse,
|
|
|
+ HuaTaiConfigureParameters huaTaiConfigureParameters,
|
|
|
+ HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto) {
|
|
|
+ List<ContractDto> contractDTOS = new ArrayList<>();
|
|
|
+ if (quoteVo.getCiRiskInfoVo() != null) {
|
|
|
+ ContractDto contractDto = new ContractDto();
|
|
|
+ ContractMainDto contractMainDto = new ContractMainDto(quoteVo.getCiRiskInfoVo(), huaTaiConfigureParameters, fullCarDataDto);
|
|
|
+ contractDto.setContractMain(contractMainDto);
|
|
|
+ contractDto.setCoverage(Collections.singletonList(new ContractDto.CoverageDto().fetchTraffic(contractMainDto)));
|
|
|
+ contractDto.setTax(new ContractDto.TaxDto(vesselTax));
|
|
|
+ contractDTOS.add(contractDto);
|
|
|
+ }
|
|
|
+ if (quoteVo.getBiRiskInfoVo() != null) {
|
|
|
+ ContractDto contractDto = new ContractDto();
|
|
|
+ ContractMainDto contractMainDto = new ContractMainDto(quoteVo.getBiRiskInfoVo(), huaTaiConfigureParameters, fullCarDataDto);
|
|
|
+ contractDto.setContractMain(contractMainDto);
|
|
|
+ contractDto.setCoverage(new ContractDto.CoverageDto().getBusiness(kindInfoVos, quantity, contractMainDto,
|
|
|
+ actualValueResponse));
|
|
|
+ contractDTOS.add(contractDto);
|
|
|
+ }
|
|
|
+
|
|
|
+ /*ContractDto contractDto = new ContractDto();
|
|
|
+ for (RiskInfoVo riskInfoVo : riskInfoVos) {
|
|
|
+ ContractDto contractDto = new ContractDto();
|
|
|
+ this.contractMain = new ContractMainDto(riskInfoVo, huaTaiConfigureParameters, fullCarDataDto);
|
|
|
+ contractDto.setContractMain(contractMain);
|
|
|
+ if (InsuranceRisk.TRAFFIC.getCode().equals(riskInfoVo.getRiskCode())) {
|
|
|
+ contractDto.coverage = Collections.singletonList(new ContractDto.CoverageDto().fetchTraffic(contractMain));
|
|
|
+ contractDto.tax = new ContractDto.TaxDto(vesselTax);
|
|
|
+ }
|
|
|
+ if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode())) {
|
|
|
+ contractDto.coverage = new ContractDto.CoverageDto().getBusiness(kindInfoVos, quantity, contractMain,
|
|
|
+ actualValueResponse);
|
|
|
+ }
|
|
|
+ contractDTOS.add(contractDto);
|
|
|
+ }*/
|
|
|
+ return contractDTOS;
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class ContractMainDto implements Serializable {
|
|
|
+
|
|
|
+ private static final long serialVersionUID = 7688777472649812180L;
|
|
|
+ //CY 报价单号(初次报价为空,同一单再次报价需传入之前接口返回的值)
|
|
|
+ @JSONField(name = "contractNo")
|
|
|
+ private String contractNo;
|
|
|
+ //Y 经办人代码
|
|
|
+ @JSONField(name = "handlerCode")
|
|
|
+ private String handlerCode;
|
|
|
+ //Y 参见险种代码
|
|
|
+ @JSONField(name = "riskCode")
|
|
|
+ private String riskCode;
|
|
|
+ //Y 起保日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "validDate")
|
|
|
+ private String validDate;
|
|
|
+ //Y 终保日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "expiryDate")
|
|
|
+ private String expiryDate;
|
|
|
+ //Y 生成日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "productionDate")
|
|
|
+ private String productionDate;
|
|
|
+
|
|
|
+ public ContractMainDto(RiskInfoVo riskInfoVo, HuaTaiConfigureParameters huaTaiConfigureParameters,
|
|
|
+ HuaTaiModelsQueryResponse.CarModelDto.FullCarDataDto fullCarDataDto) {
|
|
|
+ SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
|
|
|
+ this.riskCode = InsuranceTypeCorrespondence.getHuaTaiRisk().get(riskInfoVo.getRiskCode());
|
|
|
+ if (InsuranceRisk.BUSINESS.getCode().equals(riskInfoVo.getRiskCode()) && "1,2,3,".contains(fullCarDataDto.getEnergyTypes() + ",")) {//纯电动 燃料电池 插电式混合动力 归属为新能源产品
|
|
|
+ this.riskCode = InsuranceTypeCorrespondence.getHuaTaiNewEnergyRisk();
|
|
|
+ }
|
|
|
+ this.handlerCode = huaTaiConfigureParameters.getOperatorCode();
|
|
|
+ String startDate = riskInfoVo.getStartDate();
|
|
|
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
|
|
|
+ LocalDate localDate = LocalDate.parse(startDate, formatter);
|
|
|
+ LocalDate nextYears = localDate.plusYears(1);
|
|
|
+ if (startDate.contains(TimeConstants.START_TIME)) {
|
|
|
+ LocalDate expiry = nextYears.minusDays(1);
|
|
|
+ this.validDate = riskInfoVo.getStartDate();
|
|
|
+ this.expiryDate = expiry + " " + TimeConstants.END_TIME;
|
|
|
+ } else {
|
|
|
+ // 及时
|
|
|
+ LocalDateTime localDateTime = LocalDateTime.parse(startDate, formatter);
|
|
|
+ LocalDateTime expiryDateTime = localDateTime.plusYears(1);
|
|
|
+ this.validDate = startDate;
|
|
|
+ this.expiryDate = expiryDateTime.format(formatter);
|
|
|
+ }
|
|
|
+
|
|
|
+ this.productionDate = df.format(new Date());
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class CoverageDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = -4784793249784721550L;
|
|
|
+ //Y 保额(传值要求参见险别代码)
|
|
|
+ @JSONField(name = "amount")
|
|
|
+ private double amount;
|
|
|
+ //Y 起保日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "validDate")
|
|
|
+ private String validDate;
|
|
|
+ //Y 终保日期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "expiryDate")
|
|
|
+ private String expiryDate;
|
|
|
+ //Y 参见险别代码
|
|
|
+ @JSONField(name = "kindCode")
|
|
|
+ private String kindCode;
|
|
|
+ //Y 险别名称(传值要求参见险别代码)
|
|
|
+ @JSONField(name = "kindName")
|
|
|
+ private String kindName;
|
|
|
+ //CY 单位保额(传值要求参见险别代码)
|
|
|
+ @JSONField(name = "unitAmount")
|
|
|
+ private String unitAmount;
|
|
|
+ //CY 数量(乘客险录入值为座位数-1,其他险别无需录入)
|
|
|
+ @JSONField(name = "quantity")
|
|
|
+ private String quantity;
|
|
|
+ //CY 服务次数(传值要求参见险别代码)
|
|
|
+ @JSONField(name = "serviceTimes")
|
|
|
+ private String serviceTimes;
|
|
|
+ //CY 免赔率(车损险可传,传值要求参见险别代码)
|
|
|
+ @JSONField(name = "deductibleRate")
|
|
|
+ private String deductibleRate;
|
|
|
+ //CY 可选免赔额(附加绝对免赔率特约条款必传,传值要求参见险别代码)
|
|
|
+ @JSONField(name = "deductible")
|
|
|
+ private String deductible;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 商业险
|
|
|
+ *
|
|
|
+ * @param kindInfoVos 商业险
|
|
|
+ * @param quantity 乘客数
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public List<CoverageDto> getBusiness(List<KindInfoVo> kindInfoVos, int quantity, ContractMainDto contractMain,
|
|
|
+ HuaTaiActualValueResponse actualValueResponse) {
|
|
|
+ List<CoverageDto> list = new ArrayList<>();
|
|
|
+ for (KindInfoVo kindInfoVo : kindInfoVos) {
|
|
|
+ CoverageDto coverageDto = new CoverageDto();
|
|
|
+ String code = kindInfoVo.getKindCode();
|
|
|
+ ContractEnum contractEnum = Enum.valueOf(ContractEnum.class, "H_" + code);
|
|
|
+ coverageDto.kindCode = contractEnum.getKindCode();
|
|
|
+ coverageDto.kindName = contractEnum.getKindName();
|
|
|
+ coverageDto.amount = Double.parseDouble(kindInfoVo.getAmount());
|
|
|
+ coverageDto.validDate = contractMain.getValidDate();
|
|
|
+ coverageDto.expiryDate = contractMain.getExpiryDate();
|
|
|
+ coverageDto.unitAmount = String.valueOf(kindInfoVo.getUnitAmount());
|
|
|
+ // 车损
|
|
|
+ if ("A".equals(code)) {
|
|
|
+ //车损险保额
|
|
|
+ coverageDto.amount = actualValueResponse.getActualValue();
|
|
|
+ }
|
|
|
+ // 司机
|
|
|
+ if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getDriver(), code) >= 0) {
|
|
|
+ coverageDto.quantity = "1";
|
|
|
+ coverageDto.unitAmount = String.valueOf(kindInfoVo.getAmount());
|
|
|
+ }
|
|
|
+ // 乘客
|
|
|
+ if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getPassenger(), code) >= 0) {
|
|
|
+ coverageDto.quantity = String.valueOf(quantity);
|
|
|
+ coverageDto.amount = Integer.parseInt(kindInfoVo.getUnitAmount()) * quantity;
|
|
|
+ }
|
|
|
+ // 绝对免赔
|
|
|
+ if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getAbsoluteDeductible(), code) >= 0) {
|
|
|
+ coverageDto.deductible = "-" + kindInfoVo.getDeductibleRate();
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ArrayUtil.indexOf(InsuranceTypeCorrespondence.getSpecialContractClause(), code) >= 0) {
|
|
|
+ coverageDto.serviceTimes = String.valueOf(kindInfoVo.getServiceTimes());
|
|
|
+ }
|
|
|
+ list.add(coverageDto);
|
|
|
+
|
|
|
+ }
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 交强险
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public CoverageDto fetchTraffic(ContractMainDto contractMain) {
|
|
|
+ this.amount = 200000;
|
|
|
+ this.kindName = ContractEnum.H_BZ.getKindName();
|
|
|
+ this.kindCode = ContractEnum.H_BZ.getKindCode();
|
|
|
+ this.validDate = contractMain.getValidDate();
|
|
|
+ this.expiryDate = contractMain.getExpiryDate();
|
|
|
+ return this;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class PlatFormMessageDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = 6094816644827817884L;
|
|
|
+ //CY 平台查询码
|
|
|
+ @JSONField(name = "querySequenceNo")
|
|
|
+ private String querySequenceNo;
|
|
|
+ //CY 平台查询码(获取上年保单信息)
|
|
|
+ @JSONField(name = "querySequenceNoForBiRe")
|
|
|
+ private String querySequenceNoForBiRe;
|
|
|
+ //CY 平台校验图片转码后得到的验证码
|
|
|
+ @JSONField(name = "checkCode")
|
|
|
+ private String checkCode;
|
|
|
+
|
|
|
+ @JSONField(name = "checkCodeRe")
|
|
|
+ private String checkCodeRe;
|
|
|
+
|
|
|
+ //CY 平台校验图片转码后得到的验证码(获取上年保单信息)
|
|
|
+ @JSONField(name = "checkCodeForBiRe")
|
|
|
+ private String checkCodeForBiRe;
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class TaxDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = 5186435194104031157L;
|
|
|
+ //Y 参见纳税类型代码
|
|
|
+ @JSONField(name = "TaxConditionCode")
|
|
|
+ private String taxConditionCode;
|
|
|
+ //CY 缴税起期(完税必传)
|
|
|
+ @JSONField(name = "TaxStartDate")
|
|
|
+ private String TaxStartDate;
|
|
|
+ //CY 缴税止期(完税必传)
|
|
|
+ @JSONField(name = "TaxEndDate")
|
|
|
+ private String TaxEndDate;
|
|
|
+ //CY 开具税务机关代码(减税、免税、完税必传)
|
|
|
+ @JSONField(name = "TaxDepartmentCode")
|
|
|
+ private String TaxDepartmentCode;
|
|
|
+ //CY 开具税务机关名称(减税、免税、完税必传)
|
|
|
+ @JSONField(name = "TaxDepartment")
|
|
|
+ private String TaxDepartment;
|
|
|
+ //CY 减税/免税/完税凭证号(减税、免税、完税必传)
|
|
|
+ @JSONField(name = "DocumentNumber")
|
|
|
+ private String DocumentNumber;
|
|
|
+ //Y 纳税人是否同车主(1-是;0-否)
|
|
|
+ @JSONField(name = "isSameWithOwner")
|
|
|
+ private String isSameWithOwner;
|
|
|
+ //CY 纳税人证件类型代码,参见证件类型代码(纳税人不同车主时必填)
|
|
|
+ @JSONField(name = "taxpayerIdentifyType")
|
|
|
+ private String taxpayerIdentifyType;
|
|
|
+ //CY 纳税人证件号码(纳税人不同车主时必填)
|
|
|
+ @JSONField(name = "TaxPayerIdentificationCode")
|
|
|
+ private String TaxPayerIdentificationCode;
|
|
|
+ //CY 纳税人名称(纳税人不同车主时必填)
|
|
|
+ @JSONField(name = "TaxPayerName")
|
|
|
+ private String TaxPayerName;
|
|
|
+ //CY 参见纳税地区代码(完税必传)
|
|
|
+ @JSONField(name = "taxLocationCode")
|
|
|
+ private String taxLocationCode;
|
|
|
+ //CY 完税凭证填发日期(完税必传)(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "taxDocumentDate")
|
|
|
+ private String taxDocumentDate;
|
|
|
+ //CY 参见减免原因代码
|
|
|
+ @JSONField(name = "DeductionDueCode")
|
|
|
+ private String DeductionDueCode;
|
|
|
+ //CY 减免方案代码(1-按金额减免;2-按比例减免)
|
|
|
+ @JSONField(name = "DeductionDueType")
|
|
|
+ private String DeductionDueType;
|
|
|
+ //CY 减免金额(减免方案为1时必传)
|
|
|
+ @JSONField(name = "Deduction")
|
|
|
+ private double Deduction;
|
|
|
+ //CY 减免比例(取值区间为0-100之间,减免方案为2时必传)
|
|
|
+ @JSONField(name = "DeductionDueProportion")
|
|
|
+ private double DeductionDueProportion;
|
|
|
+
|
|
|
+ public TaxDto(VehicleAndVesselTaxVo vesselTax) {
|
|
|
+
|
|
|
+ this.taxConditionCode = "1N";
|
|
|
+ this.isSameWithOwner = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class ChargingPostDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = -6324590056449630117L;
|
|
|
+ //Y 充电桩序号
|
|
|
+ @JSONField(name = "itemNo")
|
|
|
+ private String itemNo;
|
|
|
+ //Y 充电桩型号
|
|
|
+ @JSONField(name = "chargingPostType")
|
|
|
+ private String chargingPostType;
|
|
|
+ //Y 充电桩编码
|
|
|
+ @JSONField(name = "chargingPostCode")
|
|
|
+ private String chargingPostCode;
|
|
|
+ //Y 充电桩地址
|
|
|
+ @JSONField(name = "chargingPostAddress")
|
|
|
+ private String chargingPostAddress;
|
|
|
+ //Y 充电桩安装地点类型
|
|
|
+ @JSONField(name = "chargingPostAddressType")
|
|
|
+ private String chargingPostAddressType;
|
|
|
+ //Y 充电桩种类
|
|
|
+ @JSONField(name = "chargingPostKind")
|
|
|
+ private String chargingPostKind;
|
|
|
+ //Y 充电桩购买日期(格式:YYYY-MM-DD)
|
|
|
+ @JSONField(name = "chargingPostDate")
|
|
|
+ private String chargingPostDate;
|
|
|
+ //CY UAP对应保额(投保UAP险必传,传值要求参见险别代码)
|
|
|
+ @JSONField(name = "amountUAP")
|
|
|
+ private String amountUAP;
|
|
|
+ //CY UBP对应保额(投保UBP险必传,传值要求参见险别代码)
|
|
|
+ @JSONField(name = "amountUBP")
|
|
|
+ private String amountUBP;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ @AllArgsConstructor
|
|
|
+ @NoArgsConstructor
|
|
|
+ @Data
|
|
|
+ public static class CustomerDto implements Serializable {
|
|
|
+ private static final long serialVersionUID = -931739185225437306L;
|
|
|
+ //CY 证件号码(个人客户必传)
|
|
|
+ @JSONField(name = "identifyNumber")
|
|
|
+ private String identifyNumber;
|
|
|
+ //Y 参见客户证件类型代码
|
|
|
+ @JSONField(name = "identifyType")
|
|
|
+ private String identifyType;
|
|
|
+ //Y 客户名称
|
|
|
+ @JSONField(name = "name")
|
|
|
+ private String name;
|
|
|
+ //Y 客户角色身份(1-投保人;2-被保险人;3-车主)
|
|
|
+ @JSONField(name = "role")
|
|
|
+ private String role;
|
|
|
+ //Y 手机号码
|
|
|
+ @JSONField(name = "mobile")
|
|
|
+ private String mobile;
|
|
|
+ //Y 证件有效起期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "identifyValidDate")
|
|
|
+ private String identifyValidDate;
|
|
|
+ //Y 证件有效止期(格式:YYYY-MM-DD HH24:MI:SS)
|
|
|
+ @JSONField(name = "identifyValidEndDate")
|
|
|
+ private String identifyValidEndDate;
|
|
|
+ //Y 客户职业(传值要求通过职业查询接口获得)
|
|
|
+ @JSONField(name = "occupationCode")
|
|
|
+ private String occupationCode;
|
|
|
+ //Y 客户类型(1-个人,2-机构)
|
|
|
+ @JSONField(name = "type")
|
|
|
+ private String type;
|
|
|
+ //CY 办理人姓名(机构客户必录)
|
|
|
+ @JSONField(name = "transactorName")
|
|
|
+ private String transactorName;
|
|
|
+ //CY 组织机构代码(机构客户必录)
|
|
|
+ @JSONField(name = "organizeCode")
|
|
|
+ private String organizeCode;
|
|
|
+ //Y 车辆与被保险人所属关系(1-所有;2-使用;3-管理)
|
|
|
+ @JSONField(name = "carInsuredRelation")
|
|
|
+ private String carInsuredRelation;
|
|
|
+
|
|
|
+ public CustomerDto(CustomerInfoVo customerInfoVo, String role) {
|
|
|
+ this.name = customerInfoVo.getName();
|
|
|
+ this.identifyType = "01";
|
|
|
+ this.identifyNumber = customerInfoVo.getIdentifyNumber();
|
|
|
+ this.mobile = customerInfoVo.getMobile();
|
|
|
+ this.type = "1";
|
|
|
+ this.role = role;
|
|
|
+ int randomNum = new Random().nextInt(HuaTaiBaseCode.getOccupation().size());
|
|
|
+ this.occupationCode = HuaTaiBaseCode.getOccupation().get(randomNum);//后续需要根据接口维护返参到表里
|
|
|
+ this.identifyValidDate = customerInfoVo.getIdentifyValidDate() + " " + TimeConstants.START_TIME;
|
|
|
+ this.identifyValidEndDate = customerInfoVo.getIdentifyValidEndDate() + " " + TimeConstants.END_TIME;
|
|
|
+ if ("2".equals(role)) {
|
|
|
+ this.carInsuredRelation = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public List<CustomerDto> getCustomers(CustomerInfoVo ownerInfo, CustomerInfoVo policyHolderInfo, CustomerInfoVo insuredPersonInfo) {
|
|
|
+ return Arrays.asList(new CustomerDto(ownerInfo, "3"), new CustomerDto(policyHolderInfo, "1"),
|
|
|
+ new CustomerDto(insuredPersonInfo, "2"));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|