RuleAttrMappingVo.java 15 KB

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