| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- package com.ydtech.modules.fee.service.impl;
- import com.ydtech.exception.SystemException;
- 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.model.EsmUserReferrer;
- import com.ydtech.modules.esm.service.EsmRetailService;
- import com.ydtech.modules.esm.service.EsmUserReferrerService;
- import com.ydtech.modules.fee.dto.FeeFactorInfoDto;
- import com.ydtech.modules.fee.dto.FeeSchemeReqDto;
- import com.ydtech.modules.fee.dto.FeeSchemeResDto;
- import com.ydtech.modules.fee.dto.vo.DeptManagerFee;
- import com.ydtech.modules.fee.dto.vo.EntranceFee;
- import com.ydtech.modules.fee.dto.vo.ExportFee;
- import com.ydtech.modules.fee.dto.vo.RetailStoreFee;
- import com.ydtech.modules.fee.service.CostsCalcService;
- import com.ydtech.modules.fee.service.FeeRuleSchemeService;
- import com.ydtech.modules.ins.model.vo.CarInfoVo;
- import com.ydtech.modules.ins.model.vo.KindInfoVo;
- import com.ydtech.modules.ins.model.vo.QuoteRespVo;
- import com.ydtech.modules.order.entity.InsCopyFeeOrder;
- import com.ydtech.modules.order.entity.InsFeeOrder;
- import com.ydtech.modules.order.entity.InsOrders;
- import com.ydtech.modules.order.entity.vo.*;
- import com.ydtech.modules.order.service.InsAreaCompanyService;
- import com.ydtech.modules.order.service.InsCopyFeeOrderService;
- import com.ydtech.modules.order.service.InsFeeOrderService;
- import com.ydtech.modules.order.service.InsOrdersService;
- import com.ydtech.modules.protocol.entity.po.*;
- import com.ydtech.modules.protocol.service.*;
- import com.ydtech.modules.protocols.entity.po.InsFeeOrderNew;
- import com.ydtech.modules.protocols.entity.po.PtlAgreementProductCostsNew;
- import org.apache.commons.lang3.ObjectUtils;
- import org.apache.commons.lang3.StringUtils;
- import org.apache.commons.lang3.math.NumberUtils;
- 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.text.SimpleDateFormat;
- import java.time.LocalDate;
- import java.time.format.DateTimeFormatter;
- import java.util.*;
- import java.util.stream.Collectors;
- /**
- * 费用接口中相关功能的实现类
- */
- @Service
- public class CostsCalServiceImpl implements CostsCalcService {
- @Autowired
- private SysUserService sysUserService;
- @Autowired
- private EsmRetailService esmRetailService;
- @Autowired
- private EsmUserReferrerService esmUserReferrerService;
- @Autowired
- private PtlAgreementService ptlAgreementService;
- @Override
- public EntranceFee getEntranceFee(String insuranceType, BigDecimal jqPremium, BigDecimal feeRadio, BigDecimal documentFeeRadio) {
- EntranceFee entranceFee = new EntranceFee();
- entranceFee.setInsuranceType(insuranceType);
- entranceFee.setPremium(jqPremium);
- entranceFee.setTotalProportion(feeRadio.add(documentFeeRadio));
- entranceFee.setSuperviseCosts(feeRadio);
- entranceFee.setSySuperviseCostsPremiums(jqPremium.multiply(feeRadio.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- entranceFee.setOtherCostsProportion(documentFeeRadio);
- entranceFee.setOtherCostsPremiums(jqPremium.multiply(documentFeeRadio.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- entranceFee.setTotalAmount(entranceFee.getSySuperviseCostsPremiums().add(entranceFee.getOtherCostsPremiums()));
- entranceFee.setExportSuperviseCosts(BigDecimal.ZERO);
- return entranceFee;
- }
- @Override
- public DeptManagerFee getDeptManagerFee(String insuranceType, BigDecimal premium, BigDecimal deptRadioLevel1, BigDecimal deptRadioLevel2, BigDecimal deptRadioLevel3, BigDecimal deptRadioLevel4, BigDecimal deptRadioLevel5) {
- DeptManagerFee deptManagerFee = new DeptManagerFee();
- deptManagerFee.setInsuranceType(insuranceType);
- deptManagerFee.setDeptManagerRadioLevel1(deptRadioLevel1);
- deptManagerFee.setDeptManagerRadioLevel2(deptRadioLevel2);
- deptManagerFee.setDeptManagerRadioLevel3(deptRadioLevel3);
- deptManagerFee.setDeptManagerRadioLevel4(deptRadioLevel4);
- deptManagerFee.setDeptManagerRadioLevel5(deptRadioLevel5);
- deptManagerFee.setDeptManagerRadio(deptRadioLevel1.add(deptRadioLevel2).add(deptRadioLevel3).add(deptRadioLevel4).add(deptRadioLevel5));
- deptManagerFee.setDeptManagerFeeLevel1(premium.multiply(deptRadioLevel1.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- deptManagerFee.setDeptManagerFeeLevel2(premium.multiply(deptRadioLevel2.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- deptManagerFee.setDeptManagerFeeLevel3(premium.multiply(deptRadioLevel3.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- deptManagerFee.setDeptManagerFeeLevel4(premium.multiply(deptRadioLevel4.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- deptManagerFee.setDeptManagerFeeLevel5(premium.multiply(deptRadioLevel5.divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- deptManagerFee.setDeptManagerFee(premium.multiply(deptManagerFee.getDeptManagerRadio().divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_DOWN));
- return deptManagerFee;
- }
- @Override
- public RetailStoreFee getRetailStoreFee(String userId,BigDecimal sumPremium) {
- RetailStoreFee retailStoreFee = new RetailStoreFee();
- //计算分销费用
- SysUser sysUser = sysUserService.findByUserId(userId);
- //获取分销比例
- 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);
- //用户分销人员id
- List<EsmUserReferrer> parents = esmUserReferrerService.findParents(sysUser.getId());
- if (esmRetail != null) {
- // BigDecimal sumPremium = insFeeOrderNew.getJqPremium().add(insFeeOrderNew.getSyPremium()).add(insFeeOrderNew.getNoPremium());
- if (Integer.parseInt(esmRetail.getRetailtype()) >= 3) {
- retailStoreFee.setRetailStoreRadioLevel1(new BigDecimal(esmRetail.getDisrate1()));
- retailStoreFee.setRetailStoreFeeLevel1(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
- if (parents != null && parents.size() > 2) {
- retailStoreFee.setRetailStoreUserIdLevel3(parents.get(2).getId());
- }
- }
- if (Integer.parseInt(esmRetail.getRetailtype()) >= 2) {
- retailStoreFee.setRetailStoreRadioLevel2(new BigDecimal(esmRetail.getDisrate2()));
- retailStoreFee.setRetailStoreFeeLevel2(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate2())).divide(new BigDecimal("100")));
- if (parents != null && parents.size() > 1) {
- retailStoreFee.setRetailStoreUserIdLevel2(parents.get(1).getId());
- }
- }
- if (Integer.parseInt(esmRetail.getRetailtype()) >= 1) {
- retailStoreFee.setRetailStoreRadioLevel1(new BigDecimal(esmRetail.getDisrate1()));
- retailStoreFee.setRetailStoreFeeLevel1(sumPremium.multiply(new BigDecimal(esmRetail.getDisrate1())).divide(new BigDecimal("100")));
- if (parents != null && parents.size() > 0) {
- retailStoreFee.setRetailStoreUserIdLevel1(parents.get(0).getId());
- }
- }
- }
- }else{
- retailStoreFee.setRetailStoreFee(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreRadio(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreRadioLevel1(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreRadioLevel2(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreRadioLevel3(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreFeeLevel1(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreFeeLevel2(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreFeeLevel3(BigDecimal.ZERO);
- retailStoreFee.setRetailStoreUserIdLevel1("");
- retailStoreFee.setRetailStoreUserIdLevel2("");
- retailStoreFee.setRetailStoreUserIdLevel3("");
- }
- return retailStoreFee;
- }
- @Override
- public ExportFee getExportFee(String insuranceType,EntranceFee entranceFee,DeptManagerFee deptManagerFee, RetailStoreFee retailStoreFee,BigDecimal exportProceduresRadio) {
- ExportFee exportFee = new ExportFee();
- //计算出口费用
- //出口比例
- BigDecimal exportRadio = entranceFee.getTotalProportion().subtract(deptManagerFee.getDeptManagerRadio()).subtract(retailStoreFee.getRetailStoreRadio());
- //出口费用
- exportFee.setSuperviseCosts(exportProceduresRadio);
- exportFee.setSuperviseCostsPremiums(entranceFee.getPremium().multiply(exportProceduresRadio.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
- //跟单比例
- exportFee.setOtherCostsProportion(exportRadio.subtract(exportProceduresRadio));
- //跟单费用
- exportFee.setOtherCostsPremiums(entranceFee.getPremium().multiply(exportFee.getOtherCostsProportion().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
- //总比例
- exportFee.setTotalProportion(exportFee.getSuperviseCosts().add(exportFee.getOtherCostsProportion()));
- //总费用
- exportFee.setTotalAmount(exportFee.getSuperviseCostsPremiums().add(exportFee.getOtherCostsPremiums().divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
- return exportFee;
- }
- @Override
- public SubOrderExportFeeVo getExportFee(InsFeeOrderNew insFeeOrderNew) {
- //查询协议是否包含税
- PtlAgreement ptlAgreement = ptlAgreementService.getById(insFeeOrderNew.getAgreementId());
- BigDecimal taxRadio = new BigDecimal("1.00");
- if(ptlAgreement.getWithTax().equals("否")){
- taxRadio = new BigDecimal("1.06");
- }
- SubOrderExportFeeVo subOrderExportFeeVo = new SubOrderExportFeeVo();
- //计算出口费用
- //分销管理比例总和
- BigDecimal retailStoreProportion = insFeeOrderNew.getFirstDetailProportion().add(insFeeOrderNew.getSecondDetailProportion()).
- add(insFeeOrderNew.getThirdDetailProportion());
- //交强机构管理费
- BigDecimal jqDeptProportion = insFeeOrderNew.getJqDeptProportionLevel1().add(insFeeOrderNew.getJqDeptProportionLevel2()).add(insFeeOrderNew.getJqDeptProportionLevel3()).add(insFeeOrderNew.getJqDeptProportionLevel4()).add(insFeeOrderNew.getJqDeptProportionLevel5());
- //交强入口比例总和
- BigDecimal jqEntranceProportion = insFeeOrderNew.getJqSuperviseCostsProportion().add(insFeeOrderNew.getJqOtherCostsProportion()).divide(taxRadio,2, RoundingMode.HALF_DOWN);
- //交强出口总比例
- BigDecimal jqExportProportion = jqEntranceProportion.subtract(jqDeptProportion).subtract(retailStoreProportion);
- //交强出口金额
- subOrderExportFeeVo.setJqExportCosts(insFeeOrderNew.getJqPremium().multiply(jqExportProportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
- //商业入口比例总和
- BigDecimal syEntranceProportion = insFeeOrderNew.getSySuperviseCostsProportion().add(insFeeOrderNew.getSyOtherCostsProportion()).divide(taxRadio,2, RoundingMode.HALF_DOWN);
- //商业部门管理比例总和
- BigDecimal syDeptProportion = insFeeOrderNew.getSyDeptProportionLevel1().add(insFeeOrderNew.getSyDeptProportionLevel2()).add(insFeeOrderNew.getSyDeptProportionLevel3()).add(insFeeOrderNew.getSyDeptProportionLevel4()).add(insFeeOrderNew.getSyDeptProportionLevel5());
- //商业出口比例总和
- BigDecimal syExportProportion = syEntranceProportion.subtract(syDeptProportion).subtract(retailStoreProportion);
- //商业出口金额
- subOrderExportFeeVo.setSyExportCosts(insFeeOrderNew.getSyPremium().multiply(syExportProportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
- //非车入口比例总和
- BigDecimal noEntranceProportion = insFeeOrderNew.getNoSuperviseCostsProportion().add(insFeeOrderNew.getNoOtherCostsProportion()).divide(taxRadio,2, RoundingMode.HALF_DOWN);
- //非车部门比例总和
- BigDecimal noDeptProportion = insFeeOrderNew.getNoDeptProportionLevel1().add(insFeeOrderNew.getNoDeptProportionLevel2()).add(insFeeOrderNew.getNoDeptProportionLevel3()).add(insFeeOrderNew.getNoDeptProportionLevel4()).add(insFeeOrderNew.getNoDeptProportionLevel5());
- //非车出口比例总和
- BigDecimal noExportProportion = noEntranceProportion.subtract(noDeptProportion).subtract(retailStoreProportion);
- //非车出口金额
- subOrderExportFeeVo.setNoExportCosts(insFeeOrderNew.getNoPremium().multiply(noExportProportion.divide(new BigDecimal(100))).setScale(2,BigDecimal.ROUND_DOWN));
- return subOrderExportFeeVo;
- }
- }
|