RuleAttrMappingVo.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. package com.ydtech.modules.fee.dto.vo;
  2. import com.ydtech.constants.enums.InsurKind;
  3. import com.ydtech.constants.enums.dict.insurance.VehicleType;
  4. import com.ydtech.modules.ins.model.vo.CarInfoVo;
  5. import com.ydtech.modules.ins.model.vo.CustomerInfoVo;
  6. import com.ydtech.modules.ins.model.vo.KindInfoVo;
  7. import com.ydtech.modules.order.entity.InsAreaCompany;
  8. import com.ydtech.modules.order.entity.InsOrders;
  9. import com.ydtech.modules.order.entity.api.dajia.constants.TypeVehicleMapping;
  10. import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules;
  11. import com.ydtech.modules.protocols.entity.po.PtlAgreementUndwrtRulesAttr;
  12. import io.swagger.annotations.ApiModelProperty;
  13. import lombok.Data;
  14. import java.time.LocalDate;
  15. import java.time.temporal.ChronoUnit;
  16. import java.util.ArrayList;
  17. import java.util.List;
  18. import java.util.regex.Pattern;
  19. /**
  20. * @author: tz
  21. * @description: 规则属性映射费用因子Vo
  22. * @create: 2024-2-28 08:35:57
  23. */
  24. @Data
  25. public class RuleAttrMappingVo {
  26. @ApiModelProperty(value = "因子属性Code")
  27. private String attrCode;
  28. @ApiModelProperty(value = "值")
  29. private String value;
  30. public RuleAttrMappingVo(String attrCode, String value) {
  31. this.attrCode = attrCode;
  32. this.value = value;
  33. }
  34. public static List<RuleAttrMappingVo> getRuleAttrMappingVoList(InsAreaCompany insAreaCompany, InsOrders insOrders,
  35. List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList,
  36. PtlNewCarJudgeRules carJudgeRule) {
  37. List<RuleAttrMappingVo> ruleAttrMappingVoList = new ArrayList<>();
  38. CarInfoVo carInfo = insOrders.getCarinfo().toJavaObject(CarInfoVo.class);
  39. //车牌号
  40. ruleAttrMappingVoList.add(new RuleAttrMappingVo("LicenseNo", carInfo.getLicenseNo()));
  41. //品牌型号
  42. ruleAttrMappingVoList.add(new RuleAttrMappingVo("BrandandModel", carInfo.getModelcname()));
  43. //座位数
  44. ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerCarSeatingCapacity", carInfo.getSeatCount()));
  45. //新车购置价
  46. ruleAttrMappingVoList.add(new RuleAttrMappingVo("PurchasePriceofNewVehicle", carInfo.getPurchasePrice()));
  47. //车辆用途
  48. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NatureOfUse", TypeVehicleMapping.getByCode(carInfo.getVehicleUse())));
  49. //车辆种类
  50. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarType", VehicleType.getByCode(carInfo.getCimodelclass())));
  51. //核定载质量
  52. ruleAttrMappingVoList.add(new RuleAttrMappingVo("AuthorizedLoadWeight", carInfo.getLimitLoad()));
  53. //整备质量
  54. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CurbWeight", carInfo.getVehicleweight()));
  55. //能源类型
  56. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewEnergy", carInfo.getEnergyType()));
  57. //注册日期
  58. ruleAttrMappingVoList.add(new RuleAttrMappingVo("RegistrationDate", carInfo.getRegisterDate()));
  59. //是否过户
  60. ruleAttrMappingVoList.add(new RuleAttrMappingVo("TransferVehicle", carInfo.isTransferFlag() ? "1" : "0"));
  61. //是否新车
  62. //使用注册日期算出自然月 然后判断是否是新旧车
  63. LocalDate registrationDate = LocalDate.parse(carInfo.getRegisterDate());
  64. LocalDate currentDate = LocalDate.now();
  65. boolean isNoLicenseFlag = false;
  66. if (carJudgeRule != null) {
  67. if (carJudgeRule.getUnitTypeCode().equals("天")) {
  68. long days = ChronoUnit.DAYS.between(registrationDate, currentDate);
  69. if (days < Integer.parseInt(carJudgeRule.getUnitTypeValue())) {
  70. isNoLicenseFlag = true;
  71. }
  72. }
  73. if (carJudgeRule.getUnitTypeCode().equals("月")) {
  74. long months = ChronoUnit.MONTHS.between(registrationDate, currentDate);
  75. if (months < Integer.parseInt(carJudgeRule.getUnitTypeValue())) {
  76. isNoLicenseFlag = true;
  77. }
  78. }
  79. }
  80. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NewAndOldCars", isNoLicenseFlag ? "1" : "0"));
  81. //发证日期
  82. ruleAttrMappingVoList.add(new RuleAttrMappingVo("DateofIssuance", carInfo.getIssueDate()));
  83. //车长
  84. // ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleLength", carInfo.getCarLength()));
  85. //转续保 交强
  86. ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqRenewalOfInsurance", insAreaCompany.getJqRenewal()));
  87. //转续保 商业
  88. ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyRenewalOfInsurance", insAreaCompany.getSyRenewal()));
  89. CustomerInfoVo ownerInfo = insOrders.getOwnerinfo().toJavaObject(CustomerInfoVo.class);
  90. //车主 证件号码(前6位)
  91. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersIDNumber", ownerInfo.getIdentifyNumber()));
  92. //车主 年龄
  93. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersAge", ownerInfo.getAge()));
  94. //车主 性别
  95. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnersSex", ownerInfo.getGender().equals("男") ? "1" : "2"));
  96. //车主 姓名
  97. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarOwnerName", ownerInfo.getName()));
  98. CustomerInfoVo policyHolderInfo = insOrders.getApplyinfo().toJavaObject(CustomerInfoVo.class);
  99. //投保人 证件号码(前6位)
  100. ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantIDNumber", policyHolderInfo.getIdentifyNumber()));
  101. //投保人 年龄
  102. ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantAge", policyHolderInfo.getAge()));
  103. //投保人 性别
  104. ruleAttrMappingVoList.add(new RuleAttrMappingVo("ApplicantSex", policyHolderInfo.getGender().equals("男") ? "1" : "2"));
  105. CustomerInfoVo insuredPersonInfo = insOrders.getInsureinfo().toJavaObject(CustomerInfoVo.class);
  106. //被保人 证件号码(前6位)
  107. ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredIDNumber", insuredPersonInfo.getIdentifyNumber()));
  108. //被保人 年龄
  109. ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredAge", insuredPersonInfo.getAge()));
  110. //被保人 性别
  111. ruleAttrMappingVoList.add(new RuleAttrMappingVo("InsuredSex", insuredPersonInfo.getGender().equals("男") ? "1" : "2"));
  112. List<KindInfoVo> kindInfoVos = insOrders.getKing().toJavaList(KindInfoVo.class);
  113. //险别信息
  114. kindInfoVos.forEach(kindInfoVo -> {
  115. //机动车损失险
  116. if (InsurKind.A.getCode().equals(kindInfoVo.getKindCode()))
  117. ruleAttrMappingVoList.add(new RuleAttrMappingVo("MotorVehicleDamageInsurance", String.valueOf(kindInfoVo.getAmount())));
  118. //第三者责任险
  119. if (InsurKind.B.getCode().equals(kindInfoVo.getKindCode()))
  120. ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyLiabilityInsurance",
  121. String.valueOf(Double.valueOf(kindInfoVo.getAmount()).intValue())));
  122. //司机责任险
  123. if (InsurKind.D3.getCode().equals(kindInfoVo.getKindCode()))
  124. ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverLiabilityInsurance", String.valueOf(kindInfoVo.getAmount())));
  125. //乘客责任险
  126. if (InsurKind.D4.getCode().equals(kindInfoVo.getKindCode()))
  127. ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerLiabilityInsurance", String.valueOf(kindInfoVo.getUnitAmount())));
  128. //车身划痕险
  129. if (InsurKind.L.getCode().equals(kindInfoVo.getKindCode()))
  130. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CarScratchInsurance", String.valueOf(kindInfoVo.getAmount())));
  131. //绝对免赔率特约险(车损)
  132. if (InsurKind.MJ1.getCode().equals(kindInfoVo.getKindCode()))
  133. ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleDamageAbsoluteDeductibleSpecialInsurance",
  134. String.valueOf(kindInfoVo.getAmount())));
  135. //绝对免赔率特约险(三者)
  136. if (InsurKind.MJ2.getCode().equals(kindInfoVo.getKindCode()))
  137. ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdAbsoluteDeductibleSpecialInsurance",
  138. String.valueOf(kindInfoVo.getAmount())));
  139. //绝对免赔率特约险(司机)
  140. if (InsurKind.MJ3.getCode().equals(kindInfoVo.getKindCode()))
  141. ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAbsoluteDeductibleSpecialInsurance",
  142. String.valueOf(kindInfoVo.getAmount())));
  143. //绝对免赔率特约险(乘客)
  144. if (InsurKind.MJ4.getCode().equals(kindInfoVo.getKindCode()))
  145. ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAbsoluteDeductibleSpecialInsurance",
  146. String.valueOf(kindInfoVo.getAmount())));
  147. //附加医保-三者
  148. if (InsurKind.SY_FJ_YBW1.getCode().equals(kindInfoVo.getKindCode()))
  149. ruleAttrMappingVoList.add(new RuleAttrMappingVo("ThirdPartyAdditionalMedicalInsurance",
  150. String.valueOf(kindInfoVo.getAmount())));
  151. //附加医保-座位险(乘客)
  152. if (InsurKind.SY_FJ_YBW2.getCode().equals(kindInfoVo.getKindCode()))
  153. ruleAttrMappingVoList.add(new RuleAttrMappingVo("PassengerAdditionalMedicalInsurance",
  154. String.valueOf(kindInfoVo.getAmount())));
  155. //附加医保-座位险(司机)
  156. if (InsurKind.SY_FJ_YBW3.getCode().equals(kindInfoVo.getKindCode()))
  157. ruleAttrMappingVoList.add(new RuleAttrMappingVo("DriverAdditionalMedicalInsurance",
  158. String.valueOf(kindInfoVo.getAmount())));
  159. //法定节假日限额翻倍险
  160. if (InsurKind.BD.getCode().equals(kindInfoVo.getKindCode()))
  161. ruleAttrMappingVoList.add(new RuleAttrMappingVo("LegalHolidayLimitDoublingInsurance",
  162. String.valueOf(kindInfoVo.getAmount())));
  163. //道路救援服务特约条款
  164. if (InsurKind.TY1.getCode().equals(kindInfoVo.getKindCode()))
  165. ruleAttrMappingVoList.add(new RuleAttrMappingVo("RoadsideAssistanceServiceSpecialClause",
  166. String.valueOf(kindInfoVo.getServiceTimes())));
  167. //车辆安全检测特约条款
  168. if (InsurKind.TY2.getCode().equals(kindInfoVo.getKindCode()))
  169. ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleSafetyInspectionSpecialClause",
  170. String.valueOf(kindInfoVo.getServiceTimes())));
  171. //代为驾驶服务特约条款
  172. if (InsurKind.TY3.getCode().equals(kindInfoVo.getKindCode()))
  173. ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteDrivingServiceSpecialClause",
  174. String.valueOf(kindInfoVo.getServiceTimes())));
  175. //代为送检服务特约条款
  176. if (InsurKind.TY4.getCode().equals(kindInfoVo.getKindCode()))
  177. ruleAttrMappingVoList.add(new RuleAttrMappingVo("SubstituteInspectionServiceSpecialClause",
  178. String.valueOf(kindInfoVo.getServiceTimes())));
  179. });
  180. //交强保费
  181. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryTrafficAccidentLiabilityInsurancePremium",
  182. String.valueOf(insAreaCompany.getJqpremium())));
  183. //车船税
  184. ruleAttrMappingVoList.add(new RuleAttrMappingVo("VehicleandVesselTax", String.valueOf(insAreaCompany.getTaxamount())));
  185. //非车险
  186. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonMotorInsurance", String.valueOf(insAreaCompany.getJypremium())));
  187. //总折扣率
  188. ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalDiscountRate", String.valueOf(insAreaCompany.getTotalAdjustRate())));
  189. //交强折扣
  190. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceDiscount", String.valueOf(insAreaCompany.getJqAdjustRate())));
  191. //商业折扣
  192. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialDiscount", String.valueOf(insAreaCompany.getSyAdjustRate())));
  193. //数值型总评分
  194. Pattern pattern = Pattern.compile("[0-9]*");
  195. if (insAreaCompany.getScore() != null) {
  196. if (pattern.matcher(insAreaCompany.getScore()).matches()) {
  197. //数值型评分
  198. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NumericalOverallRating", String.valueOf(insAreaCompany.getScore())));
  199. } else {
  200. //字母型评分
  201. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CharacterBasedRating", String.valueOf(insAreaCompany.getScore())));
  202. }
  203. }
  204. //交强评分
  205. if (insAreaCompany.getJqScore() != null) {
  206. if (pattern.matcher(insAreaCompany.getJqScore()).matches()) {
  207. //数值型评分
  208. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore())));
  209. } else {
  210. //字母型评分
  211. ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqCharacterBasedRating",
  212. String.valueOf(insAreaCompany.getJqScore())));
  213. }
  214. }
  215. // ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsuranceRating", String.valueOf(insAreaCompany.getJqScore())));
  216. //商业评分
  217. if (insAreaCompany.getSyScore() != null) {
  218. if (pattern.matcher(insAreaCompany.getSyScore()).matches()) {
  219. //数值型评分
  220. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialRating", String.valueOf(insAreaCompany.getSyScore())));
  221. } else {
  222. //字母型评分
  223. ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyCharacterBasedRating",
  224. String.valueOf(insAreaCompany.getSyScore())));
  225. }
  226. }
  227. //交强赔付率
  228. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CompulsoryInsurancePayoutRate", String.valueOf(insAreaCompany.getJqLossRation())));
  229. //商业赔付率
  230. ruleAttrMappingVoList.add(new RuleAttrMappingVo("CommercialPayoutRate", String.valueOf(insAreaCompany.getSyLossRation())));
  231. //总赔付率
  232. ruleAttrMappingVoList.add(new RuleAttrMappingVo("TotalPayoutRate", String.valueOf(insAreaCompany.getLossRation())));
  233. //太平绿黄红区
  234. ruleAttrMappingVoList.add(new RuleAttrMappingVo("GreenYellowAndRedAreas", insAreaCompany.getTpColorScore()));
  235. if (insAreaCompany.getAccidentalDriving() != null) {
  236. //非车名称
  237. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonCarName", insAreaCompany.getAccidentalDriving().getRideRiskName()));
  238. //非车份数
  239. ruleAttrMappingVoList.add(new RuleAttrMappingVo("NonCarQuantity",
  240. String.valueOf(insAreaCompany.getAccidentalDriving().getQuantity())));
  241. }
  242. //真假单交
  243. ruleAttrMappingVoList.add(new RuleAttrMappingVo("IsDJQ", insAreaCompany.getIsDjq()));
  244. //紫金鼎然评分
  245. ruleAttrMappingVoList.add(new RuleAttrMappingVo("UbiPredictedInfoScore", insAreaCompany.getUbiPredictedInfoScore()));
  246. // 交强出险次数
  247. ruleAttrMappingVoList.add(new RuleAttrMappingVo("JqNumberOfClaims", insAreaCompany.getJqClaims() == null ? "0" : insAreaCompany.getJqClaims()));
  248. // 商业出险次数
  249. ruleAttrMappingVoList.add(new RuleAttrMappingVo("SyNumberOfClaims", insAreaCompany.getSyClaims() == null ? "0" : insAreaCompany.getSyClaims()));
  250. return ruleAttrMappingVoList;
  251. }
  252. }