package com.ydtech.modules.fee.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ydtech.constants.enums.dict.insurance.EnergyType; import com.ydtech.exception.SystemException; import com.ydtech.modules.admin.model.SysDept; import com.ydtech.modules.admin.model.SysUser; import com.ydtech.modules.admin.model.po.SysUserAccount; import com.ydtech.modules.admin.service.SysDeptService; import com.ydtech.modules.admin.service.SysUserAccountService; import com.ydtech.modules.admin.service.SysUserService; import com.ydtech.modules.esm.model.EsmRetail; import com.ydtech.modules.esm.model.EsmUserReferrer; import com.ydtech.modules.esm.service.EsmRetailService; import com.ydtech.modules.esm.service.EsmUserReferrerService; import com.ydtech.modules.fee.dto.vo.RuleAttrMappingVo; import com.ydtech.modules.fee.service.FeeRuleSchemeNewService; import com.ydtech.modules.order.entity.InsAreaCompany; import com.ydtech.modules.order.entity.InsOrders; import com.ydtech.modules.order.entity.vo.*; import com.ydtech.modules.order.service.InsOrdersService; import com.ydtech.modules.protocol.entity.po.PtlAgreement; import com.ydtech.modules.protocol.entity.po.PtlNewCarJudgeRules; import com.ydtech.modules.protocol.service.PtlAgreementService; import com.ydtech.modules.protocol.service.PtlNewCarJudgeRulesService; import com.ydtech.modules.protocols.entity.po.*; import com.ydtech.modules.protocols.entity.vo.AgreementProductCosts; import com.ydtech.modules.protocols.service.*; import com.ydtech.utils.idgen.IdGenerate; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; import java.util.concurrent.atomic.AtomicBoolean; /** *@author: tz *@description: 费用接口中相关功能的实现类 *@create: 2024-3-1 11:45:33 */ @Service public class FeeRuleSchemeServiceNewImpl implements FeeRuleSchemeNewService { @Resource private InsOrdersService insOrdersService; @Resource private PtlAgreementProductCostsNewService ptlAgreementProductCostsNewService; @Resource private PtlAgreementUndwrtRulesAttrService ptlAgreementUndwrtRulesAttrService; @Resource private PtlAgreementProductCostsExportService ptlAgreementProductCostsExportService; @Resource private PtlAgreementProductCostsAttrLinkService ptlAgreementProductCostsAttrLinkService; @Resource private PtlAgreementUndwrtRulesNewService ptlAgreementUndwrtRulesNewService; @Resource private SysUserService sysUserService; @Resource private EsmRetailService esmRetailService; @Resource private InsFeeOrderNewService insFeeOrderNewService; @Autowired private EsmUserReferrerService esmUserReferrerService; @Autowired private SysUserAccountService sysUserAccountService; @Autowired private PtlNewCarJudgeRulesService ptlNewCarJudgeRulesService; @Autowired private PtlAgreementService ptlAgreementService; @Override public QueryOrderFeeVo queryFeeOrderInfo(String companyId) { return null; } @Override public List convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) { return null; } @Override public void compareAndUpdateFeeOrderInfo(String insOrderNo, String jqCostsProportionStr, String syCostsProportionStr, String dealUser) { } private static final Logger log = LoggerFactory.getLogger("FeeRules"); /** * 校验费用因子 */ @Override public void verificationCostFactor(InsAreaCompany insAreaCompany,InsOrders insOrders){ List agreementProductCosts = ptlAgreementProductCostsNewService.costsGetList(insAreaCompany.getAgreementId(),insOrders.getProductid()); // if(agreementProductCosts == null || agreementProductCosts.size() == 0){ // throw new SystemException("协议费用因子为空"); // } for(int i=0;i 0) { //按优先级进行排序 Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel).reversed()); //遍历费用因子 String costsId = verificationCosts(agreementProductCosts, insAreaCompany, insOrders); if(costsId != null) { calcCosts(costsId, insAreaCompany); System.out.printf("费用因子校验通过,子订单id:" + insAreaCompany.getId() + ",费用id:" + costsId); } } } /** * 校验承保规则 * @param insAreaCompany * @param insOrders */ @Override public void verificationRuleFactor(InsAreaCompany insAreaCompany, InsOrders insOrders) { List ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesNewService.rulesList(insAreaCompany.getAgreementId()); verificationRules(ptlAgreementUndwrtRules, insAreaCompany,insOrders); } /** * 计算费用 * @param costsId * @param insAreaCompany */ @Override public void calcCosts(String costsId,InsAreaCompany insAreaCompany) { //获取协议信息 PtlAgreement ptlAgreement = ptlAgreementService.getById(insAreaCompany.getAgreementId()); BigDecimal taxRadio = new BigDecimal("1.00"); if(ptlAgreement.getWithTax().equals("是")){ taxRadio = new BigDecimal("1.06"); } //税比例 固定1.06 //查找入口与出口费用比例 //入口配置 PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId); //出口配置 PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper().eq(PtlAgreementProductCostsExport::getCostsId, costsId)); InsFeeOrderNew insFeeOrderNew = new InsFeeOrderNew(); insFeeOrderNew.setId(IdGenerate.nextId()); insFeeOrderNew.setCostsId(costsId); insFeeOrderNew.setAgreementId(ptlAgreementProductCostsNew.getAgreementId()); insFeeOrderNew.setJqCostsExportProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsExportProportion())); insFeeOrderNew.setSyCostsExportProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsExportProportion())); insFeeOrderNew.setNoCostsExportProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCostsExportProportion())); //存储部门id与用户id InsOrders order = insOrdersService.getById(insAreaCompany.getOrderno()); InsFeeOrderNew insFeeOrderNewByCompanyId = insFeeOrderNewService.getInsFeeOrderNewByCompanyId(insAreaCompany.getId()); if(insFeeOrderNewByCompanyId != null){ insFeeOrderNew.setId(insFeeOrderNewByCompanyId.getId()); } insFeeOrderNew.setDeptId(order.getDeptid()); insFeeOrderNew.setUserId(order.getUserid()); insFeeOrderNew.setInsOrderNo(insAreaCompany.getId()); insFeeOrderNew.setJqPremium(insAreaCompany.getJqpremium()); insFeeOrderNew.setSyPremium(insAreaCompany.getSypremium()); insFeeOrderNew.setNoPremium(insAreaCompany.getJypremium()); //不含税 insFeeOrderNew.setJqNoTaxPremium(insAreaCompany.getJqpremium().divide(taxRadio,2)); insFeeOrderNew.setSyNoTaxPremium(insAreaCompany.getSypremium().divide(taxRadio,2)); insFeeOrderNew.setNoNoTaxPremium(insAreaCompany.getJypremium().divide(taxRadio,2)); //region 计算入口费用 //交强险总费用比例 + 加投比例 insFeeOrderNew.setJqCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportion())); BigDecimal jqCostsProportion = new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportion()); jqCostsProportion = isContainNonCar(insAreaCompany) ? jqCostsProportion.add(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment())).divide(new BigDecimal("100")) : jqCostsProportion.divide(new BigDecimal("100")); insFeeOrderNew.setJqCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(jqCostsProportion)); //商业险总费用比例 + 加投比例 insFeeOrderNew.setSyCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportion())); BigDecimal syCostsProportion = new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportion()); syCostsProportion = isContainNonCar(insAreaCompany) ? syCostsProportion.add(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment())).divide(new BigDecimal("100")) : syCostsProportion.divide(new BigDecimal("100")); insFeeOrderNew.setSyCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply(syCostsProportion)); //非车险总费用比例 insFeeOrderNew.setNoCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCostsProportion())); insFeeOrderNew.setNoCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply (new BigDecimal(ptlAgreementProductCostsNew.getNoCostsProportion()).divide(new BigDecimal("100")))); //交强监管费比例 insFeeOrderNew.setJqSuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion())); insFeeOrderNew.setJqSuperviseCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getJqCarCostsProportion()).divide(new BigDecimal("100")) )); //商业监管费比例 insFeeOrderNew.setSySuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion())); insFeeOrderNew.setSySuperviseCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getSyCarCostsProportion()).divide(new BigDecimal("100")) )); //非车监管费比例 insFeeOrderNew.setNoSuperviseCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion())); insFeeOrderNew.setNoSuperviseCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getNoCarCostsProportion()).divide(new BigDecimal("100")) )); //交强其他费用比例 insFeeOrderNew.setJqOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion())); insFeeOrderNew.setJqOtherCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getJqCarOtherCostsProportion()).divide(new BigDecimal("100")) )); //商业其他费用比例 insFeeOrderNew.setSyOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion())); insFeeOrderNew.setSyOtherCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getSyCarOtherCostsProportion()).divide(new BigDecimal("100")) )); //非车其他费用比例 insFeeOrderNew.setNoOtherCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion())); insFeeOrderNew.setNoOtherCostsPremiums(insFeeOrderNew.getNoNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getNoCarOtherCostsProportion()).divide(new BigDecimal("100")) )); //交强加投比例 insFeeOrderNew.setJqInvestmentCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment())); insFeeOrderNew.setJqInvestmentCostsPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getJqCostsProportionAddInvsestment()).divide(new BigDecimal("100")) )); //商业加投比例 insFeeOrderNew.setSyInvestmentCostsProportion(new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment())); insFeeOrderNew.setSyInvestmentCostsPremiums(insFeeOrderNew.getSyNoTaxPremium().multiply( new BigDecimal(ptlAgreementProductCostsNew.getSyCostsProportionAddInvsestment()).divide(new BigDecimal("100")) )); //endregion //region 设置出口费用 //设置出口费用 //每级的加投费用为 计算出每级管理费的占比 * 加投费用 //(一级管理费比例 / 总费用比例) * 加投费用 BigDecimal jqInvestmentCostsLevel1 = new BigDecimal(0); BigDecimal jqInvestmentCostsLevel2 = new BigDecimal(0); BigDecimal jqInvestmentCostsLevel3 = new BigDecimal(0); BigDecimal jqInvestmentCostsLevel4 = new BigDecimal(0); BigDecimal jqInvestmentCostsLevel5 = new BigDecimal(0); BigDecimal syInvestmentCostsLevel1 = new BigDecimal(0); BigDecimal syInvestmentCostsLevel2 = new BigDecimal(0); BigDecimal syInvestmentCostsLevel3 = new BigDecimal(0); BigDecimal syInvestmentCostsLevel4 = new BigDecimal(0); BigDecimal syInvestmentCostsLevel5 = new BigDecimal(0); if(insFeeOrderNew.getJqInvestmentCostsProportion().compareTo(BigDecimal.ZERO) != 0) { jqInvestmentCostsLevel1 = ptlAgreementProductCostsExport.getJqExportRadioLevel1().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums()); jqInvestmentCostsLevel2 = ptlAgreementProductCostsExport.getJqExportRadioLevel2().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums()); jqInvestmentCostsLevel3 = ptlAgreementProductCostsExport.getJqExportRadioLevel3().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums()); jqInvestmentCostsLevel4 = ptlAgreementProductCostsExport.getJqExportRadioLevel4().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums()); jqInvestmentCostsLevel5 = ptlAgreementProductCostsExport.getJqExportRadioLevel5().divide(insFeeOrderNew.getJqCostsProportion()).multiply(insFeeOrderNew.getJqInvestmentCostsPremiums()); } if(insFeeOrderNew.getSyInvestmentCostsProportion().compareTo(BigDecimal.ZERO) != 0) { syInvestmentCostsLevel1 = ptlAgreementProductCostsExport.getSyExportRadioLevel1().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums()); syInvestmentCostsLevel2 = ptlAgreementProductCostsExport.getSyExportRadioLevel2().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums()); syInvestmentCostsLevel3 = ptlAgreementProductCostsExport.getSyExportRadioLevel3().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums()); syInvestmentCostsLevel4 = ptlAgreementProductCostsExport.getSyExportRadioLevel4().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums()); syInvestmentCostsLevel5 = ptlAgreementProductCostsExport.getSyExportRadioLevel5().divide(insFeeOrderNew.getSyCostsProportion()).multiply(insFeeOrderNew.getSyInvestmentCostsPremiums()); } //交强管理比例 insFeeOrderNew.setJqDeptProportionLevel1(ptlAgreementProductCostsExport.getJqExportRadioLevel1()); insFeeOrderNew.setJqDeptPremiumsLevel1( insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel1()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel1) ); insFeeOrderNew.setJqDeptProportionLevel2(ptlAgreementProductCostsExport.getJqExportRadioLevel2()); insFeeOrderNew.setJqDeptPremiumsLevel2( insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel2()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel2) ); insFeeOrderNew.setJqDeptProportionLevel3(ptlAgreementProductCostsExport.getJqExportRadioLevel3()); insFeeOrderNew.setJqDeptPremiumsLevel3( insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel3()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel3) ); insFeeOrderNew.setJqDeptProportionLevel4(ptlAgreementProductCostsExport.getJqExportRadioLevel4()); insFeeOrderNew.setJqDeptPremiumsLevel4( insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel4()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel4) ); insFeeOrderNew.setJqDeptProportionLevel5(ptlAgreementProductCostsExport.getJqExportRadioLevel5()); insFeeOrderNew.setJqDeptPremiumsLevel5( insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel5()).divide(new BigDecimal("100")).add(jqInvestmentCostsLevel5) ); // insFeeOrderNew.setJqExportInvestmentProportion(ptlAgreementProductCostsExport.getJqExportInvestmentRadio()); // insFeeOrderNew.setJqExportInvestmentPremiums( // insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqExportInvestmentProportion()).divide(new BigDecimal("100")) // ); //商业管理比例 insFeeOrderNew.setSyDeptProportionLevel1(ptlAgreementProductCostsExport.getSyExportRadioLevel1()); insFeeOrderNew.setSyDeptPremiumsLevel1( insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel1()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel1) ); insFeeOrderNew.setSyDeptProportionLevel2(ptlAgreementProductCostsExport.getSyExportRadioLevel2()); insFeeOrderNew.setSyDeptPremiumsLevel2( insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel2()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel2) ); insFeeOrderNew.setSyDeptProportionLevel3(ptlAgreementProductCostsExport.getSyExportRadioLevel3()); insFeeOrderNew.setSyDeptPremiumsLevel3( insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel3()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel3) ); insFeeOrderNew.setSyDeptProportionLevel4(ptlAgreementProductCostsExport.getSyExportRadioLevel4()); insFeeOrderNew.setSyDeptPremiumsLevel4( insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel4()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel4) ); insFeeOrderNew.setSyDeptProportionLevel5(ptlAgreementProductCostsExport.getSyExportRadioLevel5()); insFeeOrderNew.setSyDeptPremiumsLevel5( insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel5()).divide(new BigDecimal("100")).add(syInvestmentCostsLevel5) ); // insFeeOrderNew.setSyExportInvestmentProportion(ptlAgreementProductCostsExport.getSyExportInvestmentRadio()); // insFeeOrderNew.setSyExportInvestmentPremiums( // insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyExportInvestmentProportion()).divide(new BigDecimal("100")) // ); //非车管理比例 insFeeOrderNew.setNoDeptProportionLevel1(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1()); insFeeOrderNew.setNoDeptPremiumsLevel1( insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel1()).divide(new BigDecimal("100")) ); insFeeOrderNew.setNoDeptProportionLevel2(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2()); insFeeOrderNew.setNoDeptPremiumsLevel2( insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel2()).divide(new BigDecimal("100")) ); insFeeOrderNew.setNoDeptProportionLevel3(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3()); insFeeOrderNew.setNoDeptPremiumsLevel3( insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel3()).divide(new BigDecimal("100")) ); insFeeOrderNew.setNoDeptProportionLevel4(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4()); insFeeOrderNew.setNoDeptPremiumsLevel4( insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel4()).divide(new BigDecimal("100")) ); insFeeOrderNew.setNoDeptProportionLevel5(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5()); insFeeOrderNew.setNoDeptPremiumsLevel5( insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel5()).divide(new BigDecimal("100")) ); //endregion //region 计算分销费用 InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno()); SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid()); //获取分销比例 List esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ", new Object[]{sysUser.getDeptId()}); if (esmRetailList != null && !esmRetailList.isEmpty()) { EsmRetail esmRetail = esmRetailList.get(0); //分销等级 insFeeOrderNew.setDistributionStatus(esmRetailList.get(0).getRetailtype()); //用户分销人员id List parents = esmUserReferrerService.findParents(sysUser.getId()); if (esmRetail != null) { BigDecimal sumPremium = insFeeOrderNew.getJqPremium().add(insFeeOrderNew.getSyPremium()).add(insFeeOrderNew.getNoPremium()); if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){ insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate1())); insFeeOrderNew.setThirdDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100"))); if(parents != null && parents.size() > 2){ insFeeOrderNew.setThreeLevelUserId(parents.get(2).getId()); } } if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){ insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2())); insFeeOrderNew.setSecondDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100"))); if(parents != null && parents.size() > 1){ insFeeOrderNew.setTwoLevelUserId(parents.get(1).getId()); } } if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){ insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate3())); insFeeOrderNew.setFirstDetailPremiums(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100"))); if(parents != null && parents.size() > 0) { insFeeOrderNew.setFirstLevelUserId(parents.get(0).getId()); } } } } //endregion insFeeOrderNewService.saveOrUpdate(insFeeOrderNew); } /** * 判断是否包含非车险 * @param insAreaCompany * @return */ private boolean isContainNonCar(InsAreaCompany insAreaCompany){ if(insAreaCompany.getCrossInsurance() != null && insAreaCompany.getJypremium().equals(BigDecimal.ZERO)){ return false; } return true; } /** * 匹配费用因子 * @param agreementProductCosts * @param insAreaCompany * @param insOrders * @return */ private String verificationCosts(List agreementProductCosts,InsAreaCompany insAreaCompany,InsOrders insOrders){ //匹配费用因子 //获取所有费用属性 List undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList(); //获取新旧车信息 PtlNewCarJudgeRules carJudgeRule = getCarJudgeRule(insAreaCompany.getCompanyId()); //获取所有费用属性关联 List ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders, undwrtRulesAttrList, carJudgeRule); // List filterAgreementProductCosts = new ArrayList<>(); // boolean isNoCar = false; // //查找是否有强制非车因子 // for(int i=0;i x.getAttrCode().equals("IsNonMotorInsurance")).findFirst().orElse(null); // // if(!Objects.isNull(ptlAgreementProductCostsAttrLink)){ // if(ptlAgreementProductCostsAttrLink.getMin().equals("1")){ // //只走强制非车的费用因子 // AgreementProductCosts productCosts = agreementProductCosts.get(i); // filterAgreementProductCosts.add(productCosts); // isNoCar = true; // } // // } // } // if(filterAgreementProductCosts.isEmpty()){ // filterAgreementProductCosts = agreementProductCosts; // } //是否强制走非车 // if(isNoCar) { // for(int i=0;i ptlAgreementUndwrtRulesNews,InsAreaCompany insAreaCompany,InsOrders insOrders){ //匹配承保规则 //获取所有承保规则属性 List undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList(); //获取所有费用属性关联 List ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders, undwrtRulesAttrList,getCarJudgeRule(insAreaCompany.getCompanyId())); for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) { //判断是否匹配 System.out.printf("费用因子匹配开始:" + ptlAgreementUndwrtRulesNews.get(i).getId() + "\n"); System.out.println("费用因子备注:" + ptlAgreementUndwrtRulesNews.get(i).getRuleDescription() + "\n"); if (!judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList)) { throw new SystemException("承保规则校验失败"); } } return true; } /** * 费用因子的对比 * @param ptlAgreementProductCostsAttrLinks 费用因子范围规则 * @param rulesAttrs 费用因子属性 * @param ruleAttrMappingVoList 表单提交的值 * @return */ private boolean judgements(List ptlAgreementProductCostsAttrLinks, List rulesAttrs, List ruleAttrMappingVoList){ boolean useFlag = true; for(int i=0;i x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null); //先跳过强制非车的检测 if(ptlAgreementProductCostsAttrLinks.get(i).getAttrCode().equals("IsNonMotorInsurance")) continue; //如果查找不到 传值属性 直接费用对比失败 if(ruleAttrMappingVo == null){ System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode() + "\n"); System.out.printf("传入的值找不到该属性:" + ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode() + "\n"); return false; } //查找 费用因子规则 PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get(); useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue()); if(!useFlag){ System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode() + "\n"); System.out.printf("检验的值:" + ptlAgreementProductCostsAttrLinks.get(i).getMin() + "\n"); System.out.printf("传入的值:" + ruleAttrMappingVo.getValue() + "\n"); return false; } } return useFlag; } /** * 承保规则因子的对比 * @param ptlAgreementUndwrtRulesAttrLinks * @param rulesAttrs * @param ruleAttrMappingVoList * @return */ private boolean judgementsRules(List ptlAgreementUndwrtRulesAttrLinks, List rulesAttrs, List ruleAttrMappingVoList){ boolean useFlag = true; for(int i=0;i x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null); //如果查找不到 传值属性 直接费用对比失败 if(ruleAttrMappingVo == null) { System.out.printf("规则匹配失败:" + ptlAgreementUndwrtRulesAttrLinks.get(i).getAttrCode() + "\n"); System.out.printf("传入的值找不到该属性:" + ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode() + "\n"); //找不到属性则直接跳过该条承保规则 return true; } //查找 费用因子规则 PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().get(); //如果是多选 对value进行转换 if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) { PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x -> x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null); ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName()); } //如果是单选 并且是 性别的话 转换为code if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) { if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){ PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x -> x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null); ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode()); } } useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue()); if(useFlag){ return true; } // if(!useFlag) // { // System.out.printf("规则匹配失败:" + ptlAgreementUndwrtRulesAttrLinks.get(i).getAttrCode() + "\n"); // System.out.printf("检验的值:" + ptlAgreementUndwrtRulesAttrLinks.get(i).getMin() + "\n"); // System.out.printf("传入的值:" + ruleAttrMappingVo.getValue() + "\n"); // return false; // // } } return useFlag; } /** * 费用因子的对比 强制非车险 * @param ptlAgreementProductCostsAttrLinks 费用因子范围规则 * @param rulesAttrs 费用因子属性 * @param ruleAttrMappingVoList 表单提交的值 * @return */ private boolean judgementsIsNoCar(List ptlAgreementProductCostsAttrLinks, List rulesAttrs, List ruleAttrMappingVoList){ boolean useFlag = true; for(int i=0;i x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null); //如果是强制非车险 if(ptlAgreementProductCostsAttrLinks.get(i).getAttrCode().equals("IsNonMotorInsurance")) continue; //如果查找不到 传值属性 直接费用对比失败 if(ruleAttrMappingVo == null) return false; //查找 费用因子规则 PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().get(); //如果是多选 对value进行转换 if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")) { PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x -> x.getCode().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null); ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getName()); } //如果是单选 并且是 性别的话 转换为code if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")) { if("CarOwnersSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "ApplicantSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode()) || "InsuredSex".equals(ptlAgreementUndwrtRulesAttr.getAttrCode())){ PtlAgreementUndwrtRulesDictLabal ptlAgreementUndwrtRulesDictLabal = ptlAgreementUndwrtRulesAttr.getDictLabal().stream().filter(x -> x.getName().equals(ruleAttrMappingVo.getValue())).findFirst().orElse(null); ruleAttrMappingVo.setValue(ptlAgreementUndwrtRulesDictLabal.getCode()); } } useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue()); if(!useFlag) { System.out.printf("规则匹配失败:" + ptlAgreementProductCostsAttrLinks.get(i).getAttrCode()); return false; } } return useFlag; } /** * 属性比较 返回 是否匹配 * @param ptlAgreementProductCostsAttrLink * @param ptlAgreementUndwrtRulesAttr * @param value * @return */ private boolean attrEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink,PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value){ if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")){ return checkBoxEqual(ptlAgreementProductCostsAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")){ return inputNumberEqual(ptlAgreementProductCostsAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){ //截取身份证号码 if(ptlAgreementProductCostsAttrLink.getAttrCode().equals("CarOwnersIDNumber") || ptlAgreementProductCostsAttrLink.getAttrCode().equals("ApplicantIDNumber") || ptlAgreementProductCostsAttrLink.getAttrCode().equals("InsuredIDNumber")){ value = value.substring(0,ptlAgreementProductCostsAttrLink.getMin().length()); } return inputTextEqual(ptlAgreementProductCostsAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){ //截取车牌 if(ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")){ value = value.substring(0,2); } return selectEqual(ptlAgreementProductCostsAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){ return radioEqual(ptlAgreementProductCostsAttrLink,value); } return false; } private boolean attrEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink,PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr, String value){ if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("checkbox")){ return checkBoxEqual(ptlAgreementUndwrtRulesAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("inputNumber")){ return inputNumberEqual(ptlAgreementUndwrtRulesAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("input")){ return inputTextEqual(ptlAgreementUndwrtRulesAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){ //截取车牌 if(ptlAgreementUndwrtRulesAttr.getAttrCode().equals("LicenseNo")){ value = value.substring(0,2); } return selectEqual(ptlAgreementUndwrtRulesAttrLink,value); }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("radio")){ return radioEqual(ptlAgreementUndwrtRulesAttrLink,value); } return false; } /** * 属性为多选判断 * @param ptlAgreementProductCostsAttrLink * @param value * @return */ private boolean checkBoxEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){ if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){ return true; } return false; } private boolean checkBoxEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){ if(!ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){ return true; } return false; } /** * 属性为数值型判断 * @param ptlAgreementProductCostsAttrLink * @param value * @return */ private boolean inputNumberEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){ double v = Double.parseDouble(value); //统一处理数值 if("1".equals(ptlAgreementProductCostsAttrLink.getOperator())){ if(Integer.parseInt(ptlAgreementProductCostsAttrLink.getMin()) <= v && Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) >= v){ return true; } }else if("2".equals(ptlAgreementProductCostsAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMin()) > v){ return true; } }else if("3".equals(ptlAgreementProductCostsAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMin()) >= v){ return true; } }else if("4".equals(ptlAgreementProductCostsAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) < v){ return true; } }else if("5".equals(ptlAgreementProductCostsAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementProductCostsAttrLink.getMax()) <= v){ return true; } } return false; } private boolean inputNumberEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){ double v = Double.parseDouble(value); //统一处理数值 if("1".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) <= v && Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) >= v){ return false; } }else if("2".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) > v){ return false; } }else if("3".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMin()) >= v){ return false; } }else if("4".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) < v){ return false; } }else if("5".equals(ptlAgreementUndwrtRulesAttrLink.getOperator())){ if(Double.parseDouble(ptlAgreementUndwrtRulesAttrLink.getMax()) <= v){ return false; } } return true; } /** * 属性为输入框判断 * @param ptlAgreementProductCostsAttrLink * @param value * @return */ private boolean inputTextEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){ //将值进行分割 String[] split = ptlAgreementProductCostsAttrLink.getMin().split(","); AtomicBoolean returnBool = new AtomicBoolean(false); Arrays.stream(split).forEach(x -> { if(value.contains(x)){ returnBool.set(true); } }); return returnBool.get(); } private boolean inputTextEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){ //将值进行分割 String[] split = ptlAgreementUndwrtRulesAttrLink.getMin().split(","); AtomicBoolean returnBool = new AtomicBoolean(true); Arrays.stream(split).forEach(x -> { if(!x.equals("") && value.contains(x)){ returnBool.set(false); } }); return returnBool.get(); } /** * 属性为下拉框判断 * @param ptlAgreementProductCostsAttrLink * @param value * @return */ private boolean selectEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){ if(ptlAgreementProductCostsAttrLink.getMin() != null && ptlAgreementProductCostsAttrLink.getMin().contains(value)){ return true; } return false; } /** * 属性为选择框判断 * @param ptlAgreementUndwrtRulesAttrLink * @param value * @return */ private boolean selectEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){ if(ptlAgreementUndwrtRulesAttrLink.getMin() == null) { return false; } if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){ return true; } return false; } /** * 属性为单选框判断 * @param ptlAgreementProductCostsAttrLink * @param value * @return */ private boolean radioEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){ //新能源判断 if("NewEnergy".equals(ptlAgreementProductCostsAttrLink.getAttrCode())){ // 是否是新能源车 boolean newEnergy = EnergyType.isNewEnergy(value); if(newEnergy && ptlAgreementProductCostsAttrLink.getMin().equals("1")){ return true; }else if(!newEnergy && ptlAgreementProductCostsAttrLink.getMin().equals("0")) { return true; } }else if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){ return true; } return false; } private boolean radioEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){ //新能源判断 if("NewEnergy".equals(ptlAgreementUndwrtRulesAttrLink.getAttrCode())){ // 是否是新能源车 boolean newEnergy = EnergyType.isNewEnergy(value); if(newEnergy && ptlAgreementUndwrtRulesAttrLink.getMin().equals("1")){ return false; }else if(!newEnergy && ptlAgreementUndwrtRulesAttrLink.getMin().equals("0")) { return false; } }else if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){ return false; } return true; } /** * 获取车辆新旧车信息 * @param companyId * @return */ private PtlNewCarJudgeRules getCarJudgeRule(String companyId){ //获取车辆新旧车信息 List list = ptlNewCarJudgeRulesService.list(new LambdaQueryWrapper().eq(PtlNewCarJudgeRules::getCompanyId, companyId)); if(list.size()>0){ return list.get(0); } return null; } }