package com.ydtech.modules.fee.dto.vo; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.TableField; import com.ydtech.constants.enums.InsurKind; import com.ydtech.modules.ins.model.vo.*; import com.ydtech.modules.order.entity.InsAreaCompany; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.order.entity.vo.BaseQuoteInfoVo; import com.ydtech.modules.order.service.InsOrdersService; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.regex.Pattern; /** * @author: tz * @description: 规则属性映射费用因子Vo * @create: 2024-2-28 08:35:57 */ @Data public class RuleAttrMappingVo { @ApiModelProperty(value = "因子属性Code") private String attrCode; @ApiModelProperty(value = "值") private String value; public RuleAttrMappingVo(String attrCode, String value) { this.attrCode = attrCode; this.value = value; } public static List getRuleAttrMappingVoList(InsAreaCompany insAreaCompany, InsOrders insOrders) { List ruleAttrMappingVoList = new ArrayList<>(); CarInfoVo carInfo = insOrders.getCarinfo().toJavaObject(CarInfoVo.class); //车牌号 ruleAttrMappingVoList.add(new RuleAttrMappingVo("LicenseNo", carInfo.getLicenseNo())); //品牌型号 ruleAttrMappingVoList.add(new RuleAttrMappingVo("BrandandModel", carInfo.getModelcname())); //座位数 ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerCarSeatingCapacity", carInfo.getSeatCount())); //新车购置价 ruleAttrMappingVoList.add(new RuleAttrMappingVo("PurchasePriceofNewVehicle", carInfo.getPurchasePrice())); //车辆用途 ruleAttrMappingVoList.add(new RuleAttrMappingVo("NatureOfUse", carInfo.getVehicleUse())); //车辆种类 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarType", carInfo.getCimodelclass())); //核定载质量 ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthorizedLoadWeight", carInfo.getLimitLoad())); //整备质量 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CurbWeight", carInfo.getVehicleweight())); //能源类型 ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewEnergy", carInfo.getEnergyType())); //注册日期 ruleAttrMappingVoList.add(new RuleAttrMappingVo("RegistrationDate", carInfo.getRegisterDate())); //是否过户 ruleAttrMappingVoList.add(new RuleAttrMappingVo("TransferVehicle", carInfo.isTransferFlag() ? "1" : "0")); //是否新车 ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewAndOldCars", carInfo.isNoLicenseFlag() ? "1" : "0")); //发证日期 ruleAttrMappingVoList.add(new RuleAttrMappingVo("DateofIssuance", carInfo.getIssueDate())); //车长 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleLength", carInfo.getCarLength())); //转续保 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("RenewalofInsurance", carInfo.isTransferFlagBi() ? "1")); CustomerInfoVo ownerInfo = insOrders.getOwnerinfo().toJavaObject(CustomerInfoVo.class); //车主 证件号码(前6位) ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersIDNumber", ownerInfo.getIdentifyNumber().substring(0, 6))); //车主 年龄 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersAge", ownerInfo.getAge())); //车主 性别 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersSex", ownerInfo.getGender())); //车主 姓名 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnerName", ownerInfo.getName())); CustomerInfoVo policyHolderInfo = insOrders.getApplyinfo().toJavaObject(CustomerInfoVo.class); //投保人 证件号码(前6位) ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantIDNumber", policyHolderInfo.getIdentifyNumber().substring(0, 6))); //投保人 年龄 ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantAge", policyHolderInfo.getAge())); //投保人 性别 ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantSex", policyHolderInfo.getGender())); CustomerInfoVo insuredPersonInfo = insOrders.getInsureinfo().toJavaObject(CustomerInfoVo.class); //被保人 证件号码(前6位) ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredIDNumber", insuredPersonInfo.getIdentifyNumber().substring(0, 6))); //被保人 年龄 ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredAge", insuredPersonInfo.getAge())); //被保人 性别 ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredSex", insuredPersonInfo.getGender())); List kindInfoVos = insOrders.getKing().toJavaList(KindInfoVo.class); //险别信息 kindInfoVos.forEach(kindInfoVo -> { //机动车损失险 if (InsurKind.A.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("MotorVehicleDamageInsurance", String.valueOf(kindInfoVo.getAmount()))); //第三者责任险 if (InsurKind.B.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyLiabilityInsurance", String.valueOf(kindInfoVo.getAmount()))); //司机责任险 if (InsurKind.D3.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverLiabilityInsurance", String.valueOf(kindInfoVo.getAmount()))); //乘客责任险 if (InsurKind.D4.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerLiabilityInsurance", String.valueOf(kindInfoVo.getUnitAmount()))); //车身划痕险 if (InsurKind.L.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarScratchInsurance", String.valueOf(kindInfoVo.getAmount()))); //绝对免赔率特约险(车损) if (InsurKind.MJ1.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleDamageAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount()))); //绝对免赔率特约险(三者) if (InsurKind.MJ2.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount()))); //绝对免赔率特约险(司机) if (InsurKind.MJ3.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount()))); //绝对免赔率特约险(乘客) if (InsurKind.MJ4.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAbsoluteDeductibleSpecialInsurance", String.valueOf(kindInfoVo.getAmount()))); //附加医保-三者 if (InsurKind.SY_FJ_YBW1.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount()))); //附加医保-座位险(乘客) if (InsurKind.SY_FJ_YBW2.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount()))); //附加医保-座位险(司机) if (InsurKind.SY_FJ_YBW3.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAdditionalMedicalInsurance", String.valueOf(kindInfoVo.getAmount()))); //法定节假日限额翻倍险 if (InsurKind.BD.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("LegalHolidayLimitDoublingInsurance", String.valueOf(kindInfoVo.getAmount()))); //道路救援服务特约条款 if (InsurKind.TY1.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("RoadsideAssistanceServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes()))); //车辆安全检测特约条款 if (InsurKind.TY2.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleSafetyInspectionSpecialClause", String.valueOf(kindInfoVo.getServiceTimes()))); //代为驾驶服务特约条款 if (InsurKind.TY3.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteDrivingServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes()))); //代为送检服务特约条款 if (InsurKind.TY4.getCode().equals(kindInfoVo.getKindCode())) ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteInspectionServiceSpecialClause", String.valueOf(kindInfoVo.getServiceTimes()))); }); //交强保费 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryTrafficAccidentLiabilityInsurancePremium", String.valueOf(insAreaCompany.getJqpremium()))); //车船税 ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleandVesselTax", String.valueOf(insAreaCompany.getTaxamount()))); //非车险 ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonMotorInsurance", String.valueOf(insAreaCompany.getJypremium()))); //总折扣率 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalDiscountRate", String.valueOf(insAreaCompany.()))); //交强折扣 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(quoteRespVo.getJqAdjustRate()))); //商业折扣 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(quoteRespVo.getSyAdjustRate()))); //数值型总评分 Pattern pattern = Pattern.compile("[0-9]*"); if (insAreaCompany.getScore() != null) { if (pattern.matcher(insAreaCompany.getScore()).matches()) { //数值型评分 ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(insAreaCompany.getScore()))); } else { //字母型评分 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedRating", String.valueOf(insAreaCompany.getScore()))); } } //交强评分 if (insAreaCompany.getJqScore() != null) { if (pattern.matcher(insAreaCompany.getJqScore()).matches()) { //数值型评分 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore()))); } else { //字母型评分 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedCompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore()))); } } // ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore()))); //商业评分 if (insAreaCompany.getSyScore() != null) { if (pattern.matcher(insAreaCompany.getSyScore()).matches()) { //数值型评分 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(insAreaCompany.getSyScore()))); } else { //字母型评分 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedCommercialRating", String.valueOf(insAreaCompany.getSyScore()))); } } //交强赔付率 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsurancePayoutRate", String.valueOf(insAreaCompany.getJqLossRation()))); //商业赔付率 ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialPayoutRate", String.valueOf(insAreaCompany.getSyLossRation()))); //总赔付率 ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalPayoutRate", String.valueOf(insAreaCompany.getLossRation()))); //真假单交 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthenticAndFakeOrdersExchange", insAreaCompany.getIszdj())); //出险次数 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumberOfClaims", insAreaCompany.getAccidentInfoStr())); //太平的分区 // ruleAttrMappingVoList.add(new RuleAttrMappingVo("PeacefulDistrict", quoteRespVo.getExtendInfo())); return ruleAttrMappingVoList; } }