|
|
@@ -0,0 +1,271 @@
|
|
|
+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.PageRequest;
|
|
|
+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 org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
+import java.time.YearMonth;
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+* @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<ReceivableResultVo> getReceivableList(String startTime, String endTime) {
|
|
|
+ return invReceivableMapper.getReceivableList(startTime,endTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<SigningSourceResultVo> getSigningSourceResult(String yearMonthStr,String startTime, String endTime) {
|
|
|
+ List<SigningSourceResultVo> signingSources = invReceivableMapper.getSigningSourceResult(startTime, endTime);
|
|
|
+ List<SigningSourceResultVo> 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<SettlementSourceResultVo> getSettlementSourceResult(String yearMonthStr, String startTime, String endTime) {
|
|
|
+ List<SettlementSourceResultVo> settlementSources = invReceivableMapper.getSettlementSourceResult(startTime, endTime);
|
|
|
+ List<SettlementSourceResultVo> settlementSourceResult = 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 = settlementSources.stream().filter(x -> finalI.equals(x.getDay())).count() > 0 ? true : false;
|
|
|
+ if(countBol)
|
|
|
+ {
|
|
|
+ settlementSourceResult.add(settlementSources.stream().filter(x -> String.valueOf(finalI).equals(x.getDay())).findFirst().get());
|
|
|
+ }else{
|
|
|
+ SettlementSourceResultVo settlementSourceResultVo = new SettlementSourceResultVo();
|
|
|
+ settlementSourceResultVo.setDay(finalI);
|
|
|
+ settlementSourceResultVo.setYearmonth(yearMonthStr + "-" + String.valueOf(i));
|
|
|
+ settlementSourceResult.add(settlementSourceResultVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ //处理合计
|
|
|
+ for(SettlementSourceResultVo vo : settlementSources){
|
|
|
+ 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.getSettlementAmount()) + settlementAmount;
|
|
|
+ }
|
|
|
+ SettlementSourceResultVo vo = new SettlementSourceResultVo();
|
|
|
+ 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.setSettlementAmount(String.format("%.2f", settlementAmount));
|
|
|
+ settlementSourceResult.add(vo);
|
|
|
+
|
|
|
+ //签单数据
|
|
|
+ List<SigningSourceResultVo> signingSourceResult = this.getSigningSourceResult(yearMonthStr, startTime, endTime);
|
|
|
+ //签单合计
|
|
|
+ SigningSourceResultVo signingSourceResultVo = signingSourceResult.get(signingSourceResult.size() - 1);
|
|
|
+ SettlementSourceResultVo voCalc = new SettlementSourceResultVo();
|
|
|
+ Float jq = Float.parseFloat(signingSourceResultVo.getJqPremiumTax()) - Float.parseFloat(vo.getJqPremiumTax());
|
|
|
+ Float sy = Float.parseFloat(signingSourceResultVo.getSyPremiumTax()) - Float.parseFloat(vo.getSyPremiumTax());
|
|
|
+ Float nonCar = Float.parseFloat(signingSourceResultVo.getNonCarPremiumTax()) - Float.parseFloat(vo.getNonCarPremiumTax());
|
|
|
+ Float written = Float.parseFloat(signingSourceResultVo.getWrittenPremium()) - Float.parseFloat(vo.getWrittenPremium());
|
|
|
+ Float settlement = Float.parseFloat(signingSourceResultVo.getTotalAmountReceivable()) - Float.parseFloat(vo.getSettlementAmount());
|
|
|
+ voCalc.setJqPremiumTax(String.format("%.2f", jq));
|
|
|
+ voCalc.setSyPremiumTax(String.format("%.2f", sy));
|
|
|
+ voCalc.setNonCarPremiumTax(String.format("%.2f", nonCar));
|
|
|
+ voCalc.setWrittenPremium(String.format("%.2f", written));
|
|
|
+ voCalc.setSettlementAmount(String.format("%.2f", settlement));
|
|
|
+ voCalc.setYearmonth("签单合计");
|
|
|
+ settlementSourceResult.add(voCalc);
|
|
|
+ return settlementSourceResult;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<InvSource> getRecivablePage(InvSourceQueryVo invSourceQueryVo) {
|
|
|
+ PageRequest pageRequest = new PageRequest();
|
|
|
+ pageRequest.setPageNum(invSourceQueryVo.getPageNum());
|
|
|
+ pageRequest.setPageSize(invSourceQueryVo.getPageSize());
|
|
|
+ Page page = PageRequest.buildPageRequest(pageRequest);
|
|
|
+ LambdaQueryWrapper<InvSource> queryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ if(invSourceQueryVo.getLicenseno() != null && !"".equals(invSourceQueryVo.getLicenseno())){
|
|
|
+ queryWrapper.eq(InvSource::getLicenseno,invSourceQueryVo.getLicenseno());
|
|
|
+ }
|
|
|
+ if(invSourceQueryVo.getJqPolicyId() != null && !"".equals(invSourceQueryVo.getJqPolicyId())){
|
|
|
+ queryWrapper.eq(InvSource::getJqPolicyId,invSourceQueryVo.getJqPolicyId());
|
|
|
+ }
|
|
|
+ if(invSourceQueryVo.getSyPolicyId() != null && !"".equals(invSourceQueryVo.getSyPolicyId())){
|
|
|
+ queryWrapper.eq(InvSource::getSyPolicyId,invSourceQueryVo.getSyPolicyId());
|
|
|
+ }
|
|
|
+ if(invSourceQueryVo.getNonCarPolicyId() != null && !"".equals(invSourceQueryVo.getNonCarPolicyId())){
|
|
|
+ queryWrapper.eq(InvSource::getNonCarPolicyId,invSourceQueryVo.getNonCarPolicyId());
|
|
|
+ }
|
|
|
+ Page pageData = invSourceMapper.selectPage(page, queryWrapper);
|
|
|
+ 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.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())));
|
|
|
+
|
|
|
+ return invSourceMapper.updateById(invSource) > 0 ? true : false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public IPage<InvSettlementSource> getSettlementPage(InvSettlementSourceQueryVo invSettlementSourceQueryVo) {
|
|
|
+ PageRequest pageRequest = new PageRequest();
|
|
|
+ pageRequest.setPageNum(invSettlementSourceQueryVo.getPageNum());
|
|
|
+ pageRequest.setPageSize(invSettlementSourceQueryVo.getPageSize());
|
|
|
+ Page page = PageRequest.buildPageRequest(pageRequest);
|
|
|
+ LambdaQueryWrapper<InvSettlementSource> 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());
|
|
|
+ }
|
|
|
+ Page pageData = invSettlementSourceMapper.selectPage(page, queryWrapper);
|
|
|
+
|
|
|
+ return pageData;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Boolean updateSettlement(InvSettlementSource invSettlementSource) {
|
|
|
+ //处理结算金额
|
|
|
+ invSettlementSource.setSettlementAmount(invSettlementSource.getJqPremiumTax().multiply(invSettlementSource.getCompulsoryExportRatio()
|
|
|
+ .add(invSettlementSource.getSyPremiumTax().multiply(invSettlementSource.getCommercialExportRatio()))
|
|
|
+ .add(invSettlementSource.getNonCarPremiumTax().multiply(invSettlementSource.getNonVehicleExportRatio()))));
|
|
|
+ return invSettlementSourceMapper.updateById(invSettlementSource) > 0 ? true : false;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public Integer syncStatus() {
|
|
|
+ Integer i = invSourceMapper.syncStatus();
|
|
|
+ return i;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|