|
|
@@ -0,0 +1,698 @@
|
|
|
+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.service.SysDeptService;
|
|
|
+import com.ydtech.modules.admin.service.SysUserService;
|
|
|
+import com.ydtech.modules.esm.model.EsmRetail;
|
|
|
+import com.ydtech.modules.esm.service.EsmRetailService;
|
|
|
+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.service.*;
|
|
|
+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.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.math.BigDecimal;
|
|
|
+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;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public QueryOrderFeeVo queryFeeOrderInfo(String companyId) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<QueryOrderFeeResultVo> convertOrderFeeVoData(QueryOrderFeeVo orderFeeVo) {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void compareAndUpdateFeeOrderInfo(String insOrderNo, String jqCostsProportionStr, String syCostsProportionStr, String dealUser) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验费用因子
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void verificationCostFactor(InsAreaCompany insAreaCompany,InsOrders insOrders){
|
|
|
+
|
|
|
+ List<AgreementProductCosts> agreementProductCosts = ptlAgreementProductCostsNewService.costsGetList(insAreaCompany.getAgreementId(),insOrders.getProductid());
|
|
|
+ if(agreementProductCosts == null || agreementProductCosts.size() == 0){
|
|
|
+ throw new SystemException("协议费用因子为空");
|
|
|
+ }
|
|
|
+ //按优先级进行排序
|
|
|
+ Collections.sort(agreementProductCosts, Comparator.comparingInt(AgreementProductCosts::getPriorityLevel).reversed());
|
|
|
+ //遍历费用因子
|
|
|
+ String costsId = verificationCosts(agreementProductCosts, insAreaCompany,insOrders);
|
|
|
+ calcCosts(costsId,insAreaCompany);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验承保规则
|
|
|
+ * @param insAreaCompany
|
|
|
+ * @param insOrders
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void verificationRuleFactor(InsAreaCompany insAreaCompany, InsOrders insOrders) {
|
|
|
+
|
|
|
+
|
|
|
+ List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRules = ptlAgreementUndwrtRulesNewService.rulesList(insAreaCompany.getAgreementId());
|
|
|
+ verificationRules(ptlAgreementUndwrtRules, insAreaCompany,insOrders);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 计算费用
|
|
|
+ * @param costsId
|
|
|
+ * @param insAreaCompany
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public void calcCosts(String costsId,InsAreaCompany insAreaCompany) {
|
|
|
+ //税比例 固定1.06
|
|
|
+ BigDecimal taxRadio = new BigDecimal("1.06");
|
|
|
+ //查找入口与出口费用比例
|
|
|
+ //入口配置
|
|
|
+ PtlAgreementProductCostsNew ptlAgreementProductCostsNew = ptlAgreementProductCostsNewService.getById(costsId);
|
|
|
+ //出口配置
|
|
|
+ PtlAgreementProductCostsExport ptlAgreementProductCostsExport = ptlAgreementProductCostsExportService.getOne(new LambdaQueryWrapper<PtlAgreementProductCostsExport>().eq(PtlAgreementProductCostsExport::getCostsId, costsId));
|
|
|
+ InsFeeOrderNew insFeeOrderNew = new InsFeeOrderNew();
|
|
|
+ insFeeOrderNew.setId(IdGenerate.nextId());
|
|
|
+ insFeeOrderNew.setAgreementId(ptlAgreementProductCostsNew.getAgreementId());
|
|
|
+ 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));
|
|
|
+ //计算入口费用
|
|
|
+
|
|
|
+ //交强险总费用比例 + 加投比例
|
|
|
+ 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"))
|
|
|
+ ));
|
|
|
+
|
|
|
+
|
|
|
+ //设置出口费用
|
|
|
+ //交强出口比例
|
|
|
+ insFeeOrderNew.setJqDeptProportionLevel1(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel1()));
|
|
|
+ insFeeOrderNew.setJqDeptPremiumsLevel1(
|
|
|
+ insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel1()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setJqDeptProportionLevel2(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel2()));
|
|
|
+ insFeeOrderNew.setJqDeptPremiumsLevel2(
|
|
|
+ insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel2()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setJqDeptProportionLevel3(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel3()));
|
|
|
+ insFeeOrderNew.setJqDeptPremiumsLevel3(
|
|
|
+ insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel3()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setJqDeptProportionLevel4(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel4()));
|
|
|
+ insFeeOrderNew.setJqDeptPremiumsLevel4(
|
|
|
+ insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel4()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setJqDeptProportionLevel5(new BigDecimal(ptlAgreementProductCostsExport.getJqExportRadioLevel5()));
|
|
|
+ insFeeOrderNew.setJqDeptPremiumsLevel5(
|
|
|
+ insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqDeptProportionLevel5()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setJqExportInvestmentProportion(new BigDecimal(ptlAgreementProductCostsExport.getJqExportInvestmentRadio()));
|
|
|
+ insFeeOrderNew.setJqExportInvestmentPremiums(
|
|
|
+ insFeeOrderNew.getJqPremium().multiply(insFeeOrderNew.getJqExportInvestmentProportion()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ //商业出口比例
|
|
|
+ insFeeOrderNew.setSyDeptProportionLevel1(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel1()));
|
|
|
+ insFeeOrderNew.setSyDeptPremiumsLevel1(
|
|
|
+ insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel1()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setSyDeptProportionLevel2(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel2()));
|
|
|
+ insFeeOrderNew.setSyDeptPremiumsLevel2(
|
|
|
+ insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel2()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setSyDeptProportionLevel3(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel3()));
|
|
|
+ insFeeOrderNew.setSyDeptPremiumsLevel3(
|
|
|
+ insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel3()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ insFeeOrderNew.setSyDeptProportionLevel4(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel4()));
|
|
|
+ insFeeOrderNew.setSyDeptPremiumsLevel4(
|
|
|
+ insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel4()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setSyDeptProportionLevel5(new BigDecimal(ptlAgreementProductCostsExport.getSyExportRadioLevel5()));
|
|
|
+ insFeeOrderNew.setSyDeptPremiumsLevel5(
|
|
|
+ insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyDeptProportionLevel5()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setSyExportInvestmentProportion(new BigDecimal(ptlAgreementProductCostsExport.getSyExportInvestmentRadio()));
|
|
|
+ insFeeOrderNew.setSyExportInvestmentPremiums(
|
|
|
+ insFeeOrderNew.getSyPremium().multiply(insFeeOrderNew.getSyExportInvestmentProportion()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ //非车出口比例
|
|
|
+ insFeeOrderNew.setNoDeptProportionLevel1(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel1()));
|
|
|
+ insFeeOrderNew.setNoDeptPremiumsLevel1(
|
|
|
+ insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel1()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setNoDeptProportionLevel2(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel2()));
|
|
|
+ insFeeOrderNew.setNoDeptPremiumsLevel2(
|
|
|
+ insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel2()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setNoDeptProportionLevel3(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel3()));
|
|
|
+ insFeeOrderNew.setNoDeptPremiumsLevel3(
|
|
|
+ insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel3()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ insFeeOrderNew.setNoDeptProportionLevel4(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel4()));
|
|
|
+ insFeeOrderNew.setNoDeptPremiumsLevel4(
|
|
|
+ insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel4()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+ insFeeOrderNew.setNoDeptProportionLevel5(new BigDecimal(ptlAgreementProductCostsExport.getNoCarExportRadioLevel5()));
|
|
|
+ insFeeOrderNew.setNoDeptPremiumsLevel5(
|
|
|
+ insFeeOrderNew.getNoPremium().multiply(insFeeOrderNew.getNoDeptProportionLevel5()).divide(new BigDecimal("100"))
|
|
|
+ );
|
|
|
+
|
|
|
+
|
|
|
+ //计算分销费用
|
|
|
+ InsOrders insOrders = insOrdersService.getById(insAreaCompany.getOrderno());
|
|
|
+ SysUser sysUser = sysUserService.findByUserId(insOrders.getUserid());
|
|
|
+ List<EsmRetail> esmRetailList = esmRetailService.selectList(" where t.deptid=? and t.status = '1' ",
|
|
|
+ new Object[]{sysUser.getDeptId()});
|
|
|
+
|
|
|
+ if (esmRetailList != null && !esmRetailList.isEmpty()) {
|
|
|
+ EsmRetail esmRetail = esmRetailList.get(0);
|
|
|
+ if (esmRetail != null) {
|
|
|
+ if(Integer.parseInt(esmRetail.getRetailtype()) >= 3){
|
|
|
+ insFeeOrderNew.setFirstDetailProportion(new BigDecimal(esmRetail.getDisrate1()));
|
|
|
+ insFeeOrderNew.setFirstDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ if(Integer.parseInt(esmRetail.getRetailtype()) >= 2){
|
|
|
+ insFeeOrderNew.setSecondDetailProportion(new BigDecimal(esmRetail.getDisrate2()));
|
|
|
+ insFeeOrderNew.setSecondDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ if(Integer.parseInt(esmRetail.getRetailtype()) >= 1){
|
|
|
+ insFeeOrderNew.setThirdDetailProportion(new BigDecimal(esmRetail.getDisrate3()));
|
|
|
+ insFeeOrderNew.setThirdDetailPremiums(insFeeOrderNew.getJqNoTaxPremium().multiply(new BigDecimal(esmRetail.getDisrate3())).divide(new BigDecimal("100")));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ 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> agreementProductCosts,InsAreaCompany insAreaCompany,InsOrders insOrders){
|
|
|
+ //匹配费用因子
|
|
|
+ //获取所有费用属性
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
|
|
|
+ //获取所有费用属性关联
|
|
|
+ List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders);
|
|
|
+
|
|
|
+ List<AgreementProductCosts> filterAgreementProductCosts = new ArrayList<>();
|
|
|
+
|
|
|
+ boolean isNoCar = false;
|
|
|
+ //查找是否有强制非车因子
|
|
|
+ for(int i=0;i<agreementProductCosts.size();i++) {
|
|
|
+ PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink =
|
|
|
+ agreementProductCosts.get(i).getCostsAttrLinks().stream().filter(x -> 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) {
|
|
|
+ if(judgementsIsNoCar(filterAgreementProductCosts.get(0).getCostsAttrLinks(),undwrtRulesAttrList,ruleAttrMappingVoList)){
|
|
|
+ return filterAgreementProductCosts.get(0).getId();
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ for (int i = 0; i < filterAgreementProductCosts.size(); i++) {
|
|
|
+ //判断是否匹配
|
|
|
+ if (judgements(filterAgreementProductCosts.get(i).getCostsAttrLinks(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
|
|
|
+ //返回 费用id 如果需要匹配非车的情况 将返回值返回list 后赛选
|
|
|
+ return filterAgreementProductCosts.get(i).getId();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw new SystemException("费用因子匹配失败");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private boolean verificationRules(List<PtlAgreementUndwrtRulesNew> ptlAgreementUndwrtRulesNews,InsAreaCompany insAreaCompany,InsOrders insOrders){
|
|
|
+ //匹配费用因子
|
|
|
+ //获取所有费用属性
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> undwrtRulesAttrList = ptlAgreementUndwrtRulesAttrService.getUndwrtRulesAttrList();
|
|
|
+ //获取所有费用属性关联
|
|
|
+ List<RuleAttrMappingVo> ruleAttrMappingVoList = RuleAttrMappingVo.getRuleAttrMappingVoList(insAreaCompany, insOrders);
|
|
|
+
|
|
|
+
|
|
|
+ for (int i = 0; i < ptlAgreementUndwrtRulesNews.size(); i++) {
|
|
|
+ //判断是否匹配
|
|
|
+ if (judgementsRules(ptlAgreementUndwrtRulesNews.get(i).getRulesAttrList(), undwrtRulesAttrList, ruleAttrMappingVoList)) {
|
|
|
+ //返回 费用id 如果需要匹配非车的情况 将返回值返回list 后赛选
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ throw new SystemException("承保规则校验失败");
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 费用因子的对比
|
|
|
+ * @param ptlAgreementProductCostsAttrLinks 费用因子范围规则
|
|
|
+ * @param rulesAttrs 费用因子属性
|
|
|
+ * @param ruleAttrMappingVoList 表单提交的值
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean judgements(List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinks,
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
|
|
|
+ boolean useFlag = true;
|
|
|
+
|
|
|
+ for(int i=0;i<ptlAgreementProductCostsAttrLinks.size();i++){
|
|
|
+ int finalI = i;
|
|
|
+
|
|
|
+ //查找规则中的 传值属性
|
|
|
+ RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementProductCostsAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
|
|
|
+ //如果查找不到 传值属性 直接费用对比失败
|
|
|
+ if(ruleAttrMappingVo == null)
|
|
|
+ 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)
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return useFlag;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 承保规则因子的对比
|
|
|
+ * @param ptlAgreementUndwrtRulesAttrLinks
|
|
|
+ * @param rulesAttrs
|
|
|
+ * @param ruleAttrMappingVoList
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean judgementsRules(List<PtlAgreementUndwrtRulesAttrLink> ptlAgreementUndwrtRulesAttrLinks,
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
|
|
|
+ boolean useFlag = true;
|
|
|
+
|
|
|
+ for(int i=0;i<ptlAgreementUndwrtRulesAttrLinks.size();i++){
|
|
|
+ int finalI = i;
|
|
|
+
|
|
|
+ //查找规则中的 传值属性
|
|
|
+ RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().orElse(null);
|
|
|
+ //如果查找不到 传值属性 直接费用对比失败
|
|
|
+ if(ruleAttrMappingVo == null)
|
|
|
+ continue;
|
|
|
+ //查找 费用因子规则
|
|
|
+ PtlAgreementUndwrtRulesAttr ptlAgreementUndwrtRulesAttr = rulesAttrs.stream().filter(x -> x.getAttrCode().equals(ptlAgreementUndwrtRulesAttrLinks.get(finalI).getAttrCode())).findFirst().get();
|
|
|
+ useFlag = attrEqual(ptlAgreementUndwrtRulesAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
|
|
|
+ if(!useFlag)
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return useFlag;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 费用因子的对比 强制非车险
|
|
|
+ * @param ptlAgreementProductCostsAttrLinks 费用因子范围规则
|
|
|
+ * @param rulesAttrs 费用因子属性
|
|
|
+ * @param ruleAttrMappingVoList 表单提交的值
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean judgementsIsNoCar(List<PtlAgreementProductCostsAttrLink> ptlAgreementProductCostsAttrLinks,
|
|
|
+ List<PtlAgreementUndwrtRulesAttr> rulesAttrs, List<RuleAttrMappingVo> ruleAttrMappingVoList){
|
|
|
+ boolean useFlag = true;
|
|
|
+
|
|
|
+ for(int i=0;i<ptlAgreementProductCostsAttrLinks.size();i++){
|
|
|
+ int finalI = i;
|
|
|
+ //查找规则中的 传值属性
|
|
|
+ RuleAttrMappingVo ruleAttrMappingVo = ruleAttrMappingVoList.stream().filter(x -> 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();
|
|
|
+ useFlag = attrEqual(ptlAgreementProductCostsAttrLinks.get(i), ptlAgreementUndwrtRulesAttr, ruleAttrMappingVo.getValue());
|
|
|
+ if(!useFlag)
|
|
|
+ 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")){
|
|
|
+ return inputTextEqual(ptlAgreementProductCostsAttrLink,value);
|
|
|
+ }else if(ptlAgreementUndwrtRulesAttr.getAttrType().equals("select")){
|
|
|
+ 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")){
|
|
|
+ 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 false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 属性为数值型判断
|
|
|
+ * @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(Integer.parseInt(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(x.contains(value)){
|
|
|
+ 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.contains(value)){
|
|
|
+ returnBool.set(false);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return returnBool.get();
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 属性为下拉框判断
|
|
|
+ * @param ptlAgreementProductCostsAttrLink
|
|
|
+ * @param value
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private boolean selectEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
|
|
|
+ if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean selectEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
|
|
|
+ if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean radioEqual(PtlAgreementProductCostsAttrLink ptlAgreementProductCostsAttrLink, String value){
|
|
|
+ //新能源判断
|
|
|
+ if("NewEnergy".equals(ptlAgreementProductCostsAttrLink.getAttrCode())){
|
|
|
+ if(EnergyType.isNewEnergy(ptlAgreementProductCostsAttrLink.getMin())){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ if(ptlAgreementProductCostsAttrLink.getMin().contains(value)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ private boolean radioEqual(PtlAgreementUndwrtRulesAttrLink ptlAgreementUndwrtRulesAttrLink, String value){
|
|
|
+ //新能源判断
|
|
|
+ if("NewEnergy".equals(ptlAgreementUndwrtRulesAttrLink.getAttrCode())){
|
|
|
+ if(EnergyType.isNewEnergy(ptlAgreementUndwrtRulesAttrLink.getMin())){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ if(ptlAgreementUndwrtRulesAttrLink.getMin().contains(value)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+}
|