package com.ydtech.modules.inv.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ydtech.core.page.HttpResult; import com.ydtech.core.page.PageRequest; import com.ydtech.modules.esm.model.EsmInsCompany; import com.ydtech.modules.inv.dao.InvChannelAccountMapper; import com.ydtech.modules.inv.dao.InvReceivableMapper; import com.ydtech.modules.inv.dao.InvSettlementSourceMapper; import com.ydtech.modules.inv.dao.InvSourceMapper; import com.ydtech.modules.inv.model.InvAccount; import com.ydtech.modules.inv.model.po.InvChannelAccount; import com.ydtech.modules.inv.model.po.InvSettlementSource; import com.ydtech.modules.inv.model.po.InvSource; import com.ydtech.modules.inv.model.po.QueryInvChannelAccount; import com.ydtech.modules.inv.model.vo.*; import com.ydtech.modules.inv.service.InvChannelAccountService; import com.ydtech.modules.inv.service.InvReceivableService; import com.ydtech.modules.inv.service.InvSourceService; import com.ydtech.utils.idgen.IdGenerate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.MonthDay; import java.time.YearMonth; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.stream.Collectors; /** * @author Administrator * @description 针对表【inv_channel_account(渠道账户表)】的数据库操作Service实现 * @createDate 2024-01-20 10:29:30 */ @Service public class InvReceivableServiceImpl implements InvReceivableService { @Autowired InvReceivableMapper invReceivableMapper; @Autowired InvSourceService invSourceService; @Autowired InvSourceMapper invSourceMapper; @Autowired InvSettlementSourceMapper invSettlementSourceMapper; @Override public List getReceivableList(String startTime, String endTime,String insuranceId) { return invReceivableMapper.getReceivableList(startTime,endTime,insuranceId); } @Override public List getSigningSourceResult(String yearMonthStr,String startTime, String endTime) { List signingSources = invReceivableMapper.getSigningSourceResult(startTime, endTime); List signingSourceResult = new ArrayList<>(); Float jqPremiumTax = 0f; Float syPremiumTax = 0f; Float nonCarPremiumTax = 0f; Float writtenPremium = 0f; Float settlementAmount = 0f; for(int i=1;i<=12;i++){ //查找day是否有数据 String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i); boolean countBol = signingSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false; if(countBol) { signingSourceResult.add(signingSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get()); }else{ SigningSourceResultVo signingSourceResultVo = new SigningSourceResultVo(); signingSourceResultVo.setDay(finalI); signingSourceResultVo.setYearmonth(yearMonthStr + "-" + finalI); signingSourceResult.add(signingSourceResultVo); } } //处理合计 for(SigningSourceResultVo vo : signingSourceResult){ jqPremiumTax = Float.parseFloat(vo.getJqPremiumTax()) + jqPremiumTax; syPremiumTax = Float.parseFloat(vo.getSyPremiumTax()) + syPremiumTax; nonCarPremiumTax = Float.parseFloat(vo.getNonCarPremiumTax()) + nonCarPremiumTax; writtenPremium = Float.parseFloat(vo.getWrittenPremium()) + writtenPremium; settlementAmount = Float.parseFloat(vo.getTotalAmountReceivable()) + settlementAmount; } SigningSourceResultVo vo = new SigningSourceResultVo(); vo.setYearmonth("合计"); vo.setJqPremiumTax(String.format("%.2f", jqPremiumTax)); vo.setSyPremiumTax(String.format("%.2f", syPremiumTax)); vo.setNonCarPremiumTax(String.format("%.2f", nonCarPremiumTax)); vo.setWrittenPremium(String.format("%.2f", writtenPremium)); vo.setTotalAmountReceivable(String.format("%.2f", settlementAmount)); signingSourceResult.add(vo); return signingSourceResult; } @Override public List getSigningSourceDayResult(String yearMonthStr, String startTime, String endTime,String insuranceId) { List signingSources = invReceivableMapper.getSigningSourceDayResult(startTime, endTime,insuranceId); List signingSourceResult = new ArrayList<>(); // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); // 将字符串解析为YearMonth对象 YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter); int maxDays = yearMonth.lengthOfMonth(); Float jqPremiumTax = 0f; Float syPremiumTax = 0f; Float nonCarPremiumTax = 0f; Float writtenPremium = 0f; Float settlementAmount = 0f; for(int i=1;i<=maxDays;i++){ //查找day是否有数据 String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i); boolean countBol = signingSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false; if(countBol) { signingSourceResult.add(signingSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get()); }else{ SigningSourceResultVo signingSourceResultVo = new SigningSourceResultVo(); signingSourceResultVo.setDay(finalI); signingSourceResultVo.setYearmonth(yearMonthStr + "-" + finalI); signingSourceResult.add(signingSourceResultVo); } } //处理合计 for(SigningSourceResultVo vo : signingSourceResult){ jqPremiumTax = Float.parseFloat(vo.getJqPremiumTax()) + jqPremiumTax; syPremiumTax = Float.parseFloat(vo.getSyPremiumTax()) + syPremiumTax; nonCarPremiumTax = Float.parseFloat(vo.getNonCarPremiumTax()) + nonCarPremiumTax; writtenPremium = Float.parseFloat(vo.getWrittenPremium()) + writtenPremium; settlementAmount = Float.parseFloat(vo.getTotalAmountReceivable()) + settlementAmount; } SigningSourceResultVo vo = new SigningSourceResultVo(); vo.setYearmonth("合计"); vo.setJqPremiumTax(String.format("%.2f", jqPremiumTax)); vo.setSyPremiumTax(String.format("%.2f", syPremiumTax)); vo.setNonCarPremiumTax(String.format("%.2f", nonCarPremiumTax)); vo.setWrittenPremium(String.format("%.2f", writtenPremium)); vo.setTotalAmountReceivable(String.format("%.2f", settlementAmount)); signingSourceResult.add(vo); return signingSourceResult; } public static String[] getNext12MonthsDates(YearMonth startYearMonth) { String[] next12MonthsDates = new String[12]; for (int i = 0; i < 12; i++) { YearMonth nextYearMonth = startYearMonth.plusMonths(i); String formattedDate = nextYearMonth.format(DateTimeFormatter.ofPattern("yyyy-MM")); next12MonthsDates[i] = formattedDate; } return next12MonthsDates; } @Override public List getSettlementSourceResult(String yearMonthStr, String insuranceId) { // 定义日期时间格式 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM"); // 将字符串解析为YearMonth对象 YearMonth yearMonth = YearMonth.parse(yearMonthStr, formatter); String[] next12MonthsDates = getNext12MonthsDates(yearMonth); int maxDays = yearMonth.lengthOfMonth(); //获取签单数据 List signingSources = invReceivableMapper.getSigningSourceDayResult(yearMonthStr + "-01", yearMonthStr + "-" + maxDays,insuranceId); //转换类型 List settlementSourcesTmp = new ArrayList<>(); List settlementSources = new ArrayList<>(); signingSources.forEach(signing->{ SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo(); settlementSourceResultVo.setDay(signing.getDay()); settlementSourceResultVo.setSignDate(signing.getYearmonth()); settlementSourceResultVo.setSignPremium(new BigDecimal(signing.getWrittenPremium())); settlementSourceResultVo.setSignReceivableAmount(new BigDecimal(signing.getTotalAmountReceivable())); settlementSourceResultVo.setSettlementData(new ArrayList<>()); settlementSourcesTmp.add(settlementSourceResultVo); }); for(int i=1;i<=maxDays;i++) { //查找day是否有数据 String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i); boolean countBol = settlementSourcesTmp.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false; if(!countBol) { SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo(); settlementSourceResultVo.setDay(finalI); settlementSourceResultVo.setSignDate(yearMonthStr + "-" + finalI); settlementSources.add(settlementSourceResultVo); }else{ settlementSources.add(settlementSourcesTmp.stream().filter(x -> finalI.equals(x.getDay())).findFirst().get()); } } int year = yearMonth.getYear(); //遍历结算数据 settlementSources.forEach(signing->{ // String startTime = String.valueOf(year) + "-01-01"; // String endTime = String.valueOf(year) + "-12-31"; String startTime = next12MonthsDates[0] + "-01"; int day = YearMonth.parse(next12MonthsDates[11], formatter).lengthOfMonth(); String endTime = next12MonthsDates[11] + "-" + day; List settlementSourceResultTmp = invReceivableMapper.getSettlementSourceResult(signing.getSignDate(),startTime, endTime, insuranceId); List settlementSourceResult = new ArrayList<>(); System.out.printf("1"); //补齐数据 for(int i=0;i<12;i++) { //查找day是否有数据 String month = next12MonthsDates[i]; boolean countBol = settlementSourceResultTmp.stream().filter(x -> month.equals(x.getSettlementDate())).count() > 0 ? true : false; if(!countBol) { SettlementSourceDataVo settlementSourceData = new SettlementSourceDataVo(); settlementSourceData.setDay(month); settlementSourceData.setSettlementDate(next12MonthsDates[i]); settlementSourceResult.add(settlementSourceData); }else{ settlementSourceResult.add(settlementSourceResultTmp.stream().filter(x -> month.equals(x.getSettlementDate())).findFirst().get()); } } signing.setSettlementData(settlementSourceResult); }); //计算每个日期的签单保费 和代理人佣金 settlementSources.forEach(settlementSource->{ int length = settlementSource.getSettlementData().size(); BigDecimal settlementPremium = new BigDecimal(0); BigDecimal agentCommission = new BigDecimal(0); //横向计算 for(int i=0;i x.getDay().equals("01")).count() }); // 计算每个日期的签单保费 和代理人佣金 竖向计算 List settlementSourceDataSum = new ArrayList<>(); for(int i=0;i<12;i++){ //提取每个月的数据 // String finalI = i < 10 ? "0" + String.valueOf(i) : String.valueOf(i); String month = next12MonthsDates[i]; List settlementSourceDataVos = new ArrayList<>(); BigDecimal settlementPremium = new BigDecimal(0); BigDecimal agentCommission = new BigDecimal(0); for(int j=0;j collect = settlementSources.get(j).getSettlementData().stream().filter(x -> x.getSettlementDate() != null && x.getSettlementDate().equals(month)).collect(Collectors.toList()); for(int k=0;k { SettlementSourceDataVo settlementSourceDataVo = settlementSource.getSettlementData().stream().filter(x -> !"合计".equals(x.getSettlementDate())).findFirst().get(); settlementSource.setUnCalculatedAmount(settlementSource.getSignPremium().subtract(settlementSourceDataVo.getSettlementPremium())); settlementSource.setSettledProfit(settlementSource.getSignReceivableAmount().subtract(settlementSourceDataVo.getAgentCommission())); }); //计算代理人佣金 List maxReceivable = invReceivableMapper.getMaxReceivable(yearMonthStr + "-01", yearMonthStr + "-" + maxDays); settlementSources.forEach(settlementSource -> { Boolean b = maxReceivable.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().isPresent(); if(!b) { settlementSource.setAgentAmount(new BigDecimal(0)); }else{ HashMap max = maxReceivable.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().get(); SettlementSourceDataVo settlementSourceDataVo = settlementSource.getSettlementData().get(settlementSource.getSettlementData().size() - 1); settlementSource.setAgentAmount(new BigDecimal(max.get("receivable").toString()).subtract(settlementSourceDataVo.getAgentCommission())); } }); //计算未结算利润测算 List unsettledProfitCalculation = invReceivableMapper.getUnsettledProfitCalculation(yearMonthStr + "-01", yearMonthStr + "-" + maxDays); settlementSources.forEach(settlementSource -> { Boolean b = unsettledProfitCalculation.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().isPresent(); if(!b) { settlementSource.setUnsettledProfitCalculation(new BigDecimal(0)); }else{ HashMap max = unsettledProfitCalculation.stream().filter(x -> settlementSource.getSignDate().equals(x.get("yeatmonth"))).findFirst().get(); settlementSource.setUnsettledProfitCalculation(new BigDecimal(max.get("unsettled_profit_calculation").toString())); } }); //计算签单合计 (第一层) int length = settlementSources.size(); BigDecimal signPremium = new BigDecimal(0); BigDecimal signReceivableAmount = new BigDecimal(0); BigDecimal unCalculatedAmount = new BigDecimal(0); BigDecimal settledProfit = new BigDecimal(0); BigDecimal agentAmount = new BigDecimal(0); BigDecimal unsettledProfitCalculationSum = new BigDecimal(0); for (int i = 0; i < length; i++) { SettlementSourceResultVo settlementSource = settlementSources.get(i); signPremium = signPremium.add(settlementSource.getSignPremium()); signReceivableAmount = signReceivableAmount.add(settlementSource.getSignReceivableAmount()); unCalculatedAmount = unCalculatedAmount.add(settlementSource.getUnCalculatedAmount()); settledProfit = settledProfit.add(settlementSource.getSettledProfit()); agentAmount = agentAmount.add(settlementSource.getAgentAmount()); unsettledProfitCalculationSum = unsettledProfitCalculationSum.add(settlementSource.getUnsettledProfitCalculation()); } //合计 SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo(); settlementSourceResultVo.setSignDate("合计"); settlementSourceResultVo.setSignPremium(signPremium); settlementSourceResultVo.setSettlementData(settlementSourceDataSum); settlementSourceResultVo.setSignReceivableAmount(signReceivableAmount); settlementSourceResultVo.setUnCalculatedAmount(unCalculatedAmount); settlementSourceResultVo.setSettledProfit(settledProfit); settlementSourceResultVo.setAgentAmount(agentAmount); settlementSourceResultVo.setUnsettledProfitCalculation(unsettledProfitCalculationSum); settlementSources.add(settlementSourceResultVo); return settlementSources; } @Override public IPage getRecivablePage(InvSourceQueryVo invSourceQueryVo) { PageRequest pageRequest = new PageRequest(); pageRequest.setPageNum(invSourceQueryVo.getPageNum()); pageRequest.setPageSize(invSourceQueryVo.getPageSize()); Page page = PageRequest.buildPageRequest(pageRequest); if(invSourceQueryVo.getSigningTime() != null && !"".equals(invSourceQueryVo.getSigningTime())) { String[] split = invSourceQueryVo.getSigningTime().split(","); invSourceQueryVo.setSigningTimeStartTime(split[0]); invSourceQueryVo.setSigningTimeEndTime(split[1]); } if(invSourceQueryVo.getClearingTime() != null && !"".equals(invSourceQueryVo.getClearingTime())) { String[] split1 = invSourceQueryVo.getClearingTime().split(","); invSourceQueryVo.setClearingTimeStartTime(split1[0]); invSourceQueryVo.setClearingTimeEndTime(split1[1]); } Page pageData = invSourceMapper.getRecivablePage(page, invSourceQueryVo); List records = pageData.getRecords(); records.forEach(x->{ x.setClearingState("0".equals(x.getClearingState()) ? "未结算" : "1".equals(x.getClearingState()) ? "已结算" : "2".equals(x.getClearingState()) ? "孤儿单" : x.getClearingState()); x.setInsuranceClearingState("0".equals(x.getInsuranceClearingState()) ? "未结算" : "1".equals(x.getInsuranceClearingState()) ? "已结算" : x.getInsuranceClearingState()); }); pageData.setRecords(records); return pageData; } @Override public List getRecivableList(InvSourceQueryVo invSourceQueryVo) { String[] split = invSourceQueryVo.getSigningTime().split(","); invSourceQueryVo.setSigningTimeStartTime(split[0]); invSourceQueryVo.setSigningTimeEndTime(split[1]); String[] split1 = invSourceQueryVo.getClearingTime().split(","); invSourceQueryVo.setClearingTimeStartTime(split1[0]); invSourceQueryVo.setClearingTimeEndTime(split1[1]); List pageData = invSourceMapper.getRecivableList(invSourceQueryVo); pageData.forEach(x->{ x.setClearingState("0".equals(x.getClearingState()) ? "未结算" : "1".equals(x.getClearingState()) ? "已结算" : "2".equals(x.getClearingState()) ? "孤儿单" : x.getClearingState()); x.setInsuranceClearingState("0".equals(x.getInsuranceClearingState()) ? "未结算" : "1".equals(x.getInsuranceClearingState()) ? "已结算" : x.getInsuranceClearingState()); }); return pageData; } @Override public Boolean updateRecivable(InvSource invSource) { BigDecimal tax = new BigDecimal(1.06); //处理交强不含税 invSource.setJqPremium(invSource.getJqPremiumTax().divide(tax,2, RoundingMode.HALF_UP)); //处理商业不含税 invSource.setSyPremium(invSource.getSyPremiumTax().divide(tax,2, RoundingMode.HALF_UP)); //处理非车不含税 invSource.setNonCarPremium(invSource.getNonCarPremiumTax().divide(tax,2, RoundingMode.HALF_UP)); //处理非跟单比例 invSource.setJqNonCopyingRatio(invSource.getJqReceivableRatio().subtract(invSource.getJqPremiumRatio())); invSource.setSyNonCopyingRatio(invSource.getSyReceivableRatio().subtract(invSource.getSyPremiumRatio())); invSource.setNonCarNonCopyingRatio(invSource.getNonCarReceivableRatio().subtract(invSource.getNonCarPremiumRatio())); //处理手续费金额 invSource.setPremium( invSource.getJqPremium().multiply(invSource.getJqPremiumRatio()) .add(invSource.getSyPremium().multiply(invSource.getSyPremiumRatio())) .add(invSource.getNonCarPremium().multiply(invSource.getNonCarPremiumRatio()))); //处理非跟单金额 invSource.setNonCopying( invSource.getJqPremium().multiply(invSource.getJqNonCopyingRatio()) .add(invSource.getSyPremium().multiply(invSource.getSyNonCopyingRatio())) .add(invSource.getNonCarPremium().multiply(invSource.getNonCarNonCopyingRatio()))); //处理保司应收金额 invSource.setReceivable( invSource.getJqPremium().multiply(invSource.getJqReceivableRatio()) .add(invSource.getSyPremium().multiply(invSource.getSyReceivableRatio())) .add(invSource.getNonCarPremium().multiply(invSource.getNonCarReceivableRatio()))); //处理补贴金额 invSource.setSubsidyAmount( invSource.getJqPremiumTax().multiply(invSource.getSubsidyRatio()) .add(invSource.getSyPremiumTax().multiply(invSource.getSubsidyRatio())) .add(invSource.getNonCarPremiumTax().multiply(invSource.getSubsidyRatio()))); //处理应收总金额 invSource.setTotalReceivableAmount( invSource.getReceivable().add(invSource.getSubsidyAmount())); //处理最大应付金额 invSource.setMaxReceivable( invSource.getJqPremiumTax().multiply(invSource.getMaxJqReceivableRatio()) .add(invSource.getSyPremiumTax().multiply(invSource.getMaxSyReceivableRatio())) .add(invSource.getNonCarPremiumTax().multiply(invSource.getMaxNonCarReceivableRatio()))); invSource.setClearingState("未结算".equals(invSource.getClearingState()) ? "0" : "已结算".equals(invSource.getClearingState()) ? "1" : invSource.getClearingState()); invSource.setInsuranceClearingState("未结算".equals(invSource.getInsuranceClearingState()) ? "0" : "已结算".equals(invSource.getInsuranceClearingState()) ? "1" : invSource.getInsuranceClearingState()); return invSourceMapper.updateById(invSource) > 0 ? true : false; } @Override public IPage getSettlementPage(InvSettlementSourceQueryVo invSettlementSourceQueryVo) { PageRequest pageRequest = new PageRequest(); pageRequest.setPageNum(invSettlementSourceQueryVo.getPageNum()); pageRequest.setPageSize(invSettlementSourceQueryVo.getPageSize()); Page page = PageRequest.buildPageRequest(pageRequest); LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){ queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno()); } if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){ queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId()); } if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){ queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId()); } if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){ queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId()); } if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){ queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId()); } if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){ queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType()); } if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate())) { String[] split = invSettlementSourceQueryVo.getSignDate().split(","); queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]); } if(invSettlementSourceQueryVo.getAgencySettlementTime() != null && !"".equals(invSettlementSourceQueryVo.getAgencySettlementTime())) { String[] split = invSettlementSourceQueryVo.getAgencySettlementTime().split(","); queryWrapper.between(InvSettlementSource::getAgencySettlementTime,split[0],split[1]); } if(invSettlementSourceQueryVo.getChannel() != null && !"".equals(invSettlementSourceQueryVo.getChannel())) { queryWrapper.eq(InvSettlementSource::getChannel,invSettlementSourceQueryVo.getChannel()); } if(invSettlementSourceQueryVo.getChannelClassification() != null && !"".equals(invSettlementSourceQueryVo.getChannelClassification())) { queryWrapper.eq(InvSettlementSource::getChannelClassification,invSettlementSourceQueryVo.getChannelClassification()); } if(invSettlementSourceQueryVo.getInsuredName() != null && !"".equals(invSettlementSourceQueryVo.getInsuredName())){ queryWrapper.like(InvSettlementSource::getInsuredName,invSettlementSourceQueryVo.getInsuredName()); } Page pageData = invSettlementSourceMapper.selectPage(page, queryWrapper); return pageData; } @Override public List getSettlementList(InvSettlementSourceQueryVo invSettlementSourceQueryVo) { LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); if(invSettlementSourceQueryVo.getLicenseno() != null && !"".equals(invSettlementSourceQueryVo.getLicenseno())){ queryWrapper.eq(InvSettlementSource::getLicenseno,invSettlementSourceQueryVo.getLicenseno()); } if(invSettlementSourceQueryVo.getJqPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getJqPolicyId())){ queryWrapper.eq(InvSettlementSource::getJqPolicyId,invSettlementSourceQueryVo.getJqPolicyId()); } if(invSettlementSourceQueryVo.getSyPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getSyPolicyId())){ queryWrapper.eq(InvSettlementSource::getSyPolicyId,invSettlementSourceQueryVo.getSyPolicyId()); } if(invSettlementSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSettlementSourceQueryVo.getNonCarPolicyId())){ queryWrapper.eq(InvSettlementSource::getNonCarPolicyId,invSettlementSourceQueryVo.getNonCarPolicyId()); } if(invSettlementSourceQueryVo.getInsuranceId() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceId())){ queryWrapper.in(InvSettlementSource::getInsuranceId,invSettlementSourceQueryVo.getInsuranceId()); } if(invSettlementSourceQueryVo.getInsuranceType() != null && !"".equals(invSettlementSourceQueryVo.getInsuranceType())){ queryWrapper.eq(InvSettlementSource::getInsuranceType,invSettlementSourceQueryVo.getInsuranceType()); } if(invSettlementSourceQueryVo.getSignDate() != null && !"".equals(invSettlementSourceQueryVo.getSignDate())) { String[] split = invSettlementSourceQueryVo.getSignDate().split(","); queryWrapper.between(InvSettlementSource::getSignDate,split[0],split[1]); } List pageData = invSettlementSourceMapper.selectList(queryWrapper); return pageData; } @Override public Boolean updateSettlement(InvSettlementSource invSettlementSource) { //处理结算金额 BigDecimal settlementAmount = invSettlementSource.getJqPremiumTax().multiply(invSettlementSource.getCompulsoryExportRatio()) .add(invSettlementSource.getSyPremiumTax().multiply(invSettlementSource.getCommercialExportRatio())) .add(invSettlementSource.getNonCarPremiumTax().multiply(invSettlementSource.getNonVehicleExportRatio())); invSettlementSource.setSettlementAmount(settlementAmount); return invSettlementSourceMapper.updateById(invSettlementSource) > 0 ? true : false; } @Override public Integer syncStatus() { Integer i = invSourceMapper.syncStatus(); return i; } @Override public List getInsureCompany() { List insureCompany = invReceivableMapper.getInsureCompany(); return insureCompany; } @Override public Page getReceivableAndSettlementPage(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) { Page page = new Page(); page.setCurrent(receivableAndSettlementQueryVo.getPageNum()); page.setSize(receivableAndSettlementQueryVo.getPageSize()); Page receivableAndSettlementPage = invReceivableMapper.getReceivableAndSettlementPage(page, receivableAndSettlementQueryVo); return receivableAndSettlementPage; } @Override public List getReceivableAndSettlementList(ReceivableAndSettlementQueryVo receivableAndSettlementQueryVo) { List receivableAndSettlementVoList = invReceivableMapper.getReceivableAndSettlementPage(receivableAndSettlementQueryVo); return receivableAndSettlementVoList; } @Override public Boolean deleteReceivable(String[] ids) { return invReceivableMapper.deleteReceivable(String.join(",",ids)); } @Override public Boolean updateRecivableBatch(InvSource invSource) { List list = Arrays.asList(invSource.getIds()); List invSources = invSourceMapper.selectBatchIds(list); invSources.forEach(x -> { x.setInsuranceClearingState(invSource.getInsuranceClearingState()); invSourceMapper.updateById(x); }); return true; } @Override public Boolean updateSettlementBatch(InvSettlementSource invSettlementSource) { List list = Arrays.asList(invSettlementSource.getIds()); List invSettlementSources = invSettlementSourceMapper.selectBatchIds(list); invSettlementSources.forEach(x -> { x.setBusinessOwner(invSettlementSource.getBusinessOwner()); x.setCompulsoryExportRatio(invSettlementSource.getCompulsoryExportRatio()); x.setCommercialExportRatio(invSettlementSource.getCommercialExportRatio()); x.setNonVehicleExportRatio(invSettlementSource.getNonVehicleExportRatio()); invSettlementSourceMapper.updateById(x); }); return true; } @Override public Boolean addReceivable(InvSource invSource) { invSource.setId(IdGenerate.nextId()); invSource.builder(); BigDecimal tax = new BigDecimal(1.06); //处理交强不含税 invSource.setJqPremium(invSource.getJqPremiumTax().divide(tax,2, RoundingMode.HALF_UP)); //处理商业不含税 invSource.setSyPremium(invSource.getSyPremiumTax().divide(tax,2, RoundingMode.HALF_UP)); //处理非车不含税 invSource.setNonCarPremium(invSource.getNonCarPremiumTax().divide(tax,2, RoundingMode.HALF_UP)); //处理非跟单比例 invSource.setJqNonCopyingRatio(invSource.getJqReceivableRatio().subtract(invSource.getJqPremiumRatio())); invSource.setSyNonCopyingRatio(invSource.getSyReceivableRatio().subtract(invSource.getSyPremiumRatio())); invSource.setNonCarNonCopyingRatio(invSource.getNonCarReceivableRatio().subtract(invSource.getNonCarPremiumRatio())); //处理手续费金额 invSource.setPremium( invSource.getJqPremium().multiply(invSource.getJqPremiumRatio()) .add(invSource.getSyPremium().multiply(invSource.getSyPremiumRatio())) .add(invSource.getNonCarPremium().multiply(invSource.getNonCarPremiumRatio()))); //处理非跟单金额 invSource.setNonCopying( invSource.getJqPremium().multiply(invSource.getJqNonCopyingRatio()) .add(invSource.getSyPremium().multiply(invSource.getSyNonCopyingRatio())) .add(invSource.getNonCarPremium().multiply(invSource.getNonCarNonCopyingRatio()))); //处理保司应收金额 invSource.setReceivable( invSource.getJqPremium().multiply(invSource.getJqReceivableRatio()) .add(invSource.getSyPremium().multiply(invSource.getSyReceivableRatio())) .add(invSource.getNonCarPremium().multiply(invSource.getNonCarReceivableRatio()))); //处理补贴金额 invSource.setSubsidyAmount( invSource.getJqPremiumTax().multiply(invSource.getSubsidyRatio()) .add(invSource.getSyPremiumTax().multiply(invSource.getSubsidyRatio())) .add(invSource.getNonCarPremiumTax().multiply(invSource.getSubsidyRatio()))); //处理应收总金额 invSource.setTotalReceivableAmount( invSource.getReceivable().add(invSource.getSubsidyAmount())); //处理最大应付金额 invSource.setMaxReceivable( invSource.getJqPremiumTax().multiply(invSource.getMaxJqReceivableRatio()) .add(invSource.getSyPremiumTax().multiply(invSource.getMaxSyReceivableRatio())) .add(invSource.getNonCarPremiumTax().multiply(invSource.getMaxNonCarReceivableRatio()))); boolean save = invSourceMapper.insert (invSource) > 0 ? true : false; return save; } @Override public List dataMatching() { List data = invSourceMapper.dataMatching(); return data; } }