|
|
@@ -25,6 +25,7 @@ import org.springblade.los.finance.stl.entity.FinStlBills;
|
|
|
import org.springblade.los.finance.stl.mapper.FinStlBillsMapper;
|
|
|
import org.springblade.los.statisticAnalysis.*;
|
|
|
import org.springblade.los.statisticAnalysis.service.IStatisticAnalysisService;
|
|
|
+import org.springblade.los.view.mapper.FinanceProfitMapper;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
@@ -53,6 +54,7 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
private final FinStlBillsMapper finStlBillsMapper;
|
|
|
private final FinInvoicesMapper finInvoicesMapper;
|
|
|
private final FinAccBillsMapper finAccBillsMapper;
|
|
|
+ private final FinanceProfitMapper financeProfitMapper;
|
|
|
|
|
|
private final IDeptUtils deptUtils;
|
|
|
|
|
|
@@ -74,28 +76,31 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
- public R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<FinanceProfit> page) {
|
|
|
- List<FinanceProfit> financeProfitList = new ArrayList<>();
|
|
|
- if (financeProfit.getBillType().contains("SE") || financeProfit.getBillType().contains("AE")) {
|
|
|
- List<FinanceProfit> financeProfitListHy = billsMapper.financeProfit(financeProfit);
|
|
|
+ public R<IPage<FinanceProfitDtoList>> financeProfit(FinanceProfitDtoList financeProfit, IPage<FinanceProfitDtoList> page) {
|
|
|
+ /*if (financeProfit.getBillType().contains("SE") || financeProfit.getBillType().contains("AE")) {
|
|
|
+ List<FinanceProfitDtoList> financeProfitListHy = billsMapper.financeProfit(financeProfit);
|
|
|
if (!financeProfitListHy.isEmpty()) {
|
|
|
financeProfitList.addAll(financeProfitListHy);
|
|
|
}
|
|
|
} else if (financeProfit.getBillType().contains("SI") || financeProfit.getBillType().contains("AI")) {
|
|
|
- List<FinanceProfit> financeProfitListKy = aeaBillsMapper.financeProfit(financeProfit);
|
|
|
+ List<FinanceProfitDtoList> financeProfitListKy = aeaBillsMapper.financeProfit(financeProfit);
|
|
|
if (!financeProfitListKy.isEmpty()) {
|
|
|
financeProfitList.addAll(financeProfitListKy);
|
|
|
}
|
|
|
} else if (financeProfit.getBillType().contains("BGSE") || financeProfit.getBillType().contains("BGSI")
|
|
|
|| financeProfit.getBillType().contains("BGAE") || financeProfit.getBillType().contains("BGAI")) {
|
|
|
- List<FinanceProfit> financeProfitListBg = customsDeclarationMapper.financeProfit(financeProfit);
|
|
|
+ List<FinanceProfitDtoList> financeProfitListBg = customsDeclarationMapper.financeProfit(financeProfit);
|
|
|
if (!financeProfitListBg.isEmpty()) {
|
|
|
financeProfitList.addAll(financeProfitListBg);
|
|
|
}
|
|
|
- }
|
|
|
+ }*/
|
|
|
+ List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
|
|
|
+ BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C");
|
|
|
+ BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D");
|
|
|
//是否合并amend费用 true 合并 false 不合并
|
|
|
if (ObjectUtils.isNotNull(financeProfit.getMergeAmendFee())) {
|
|
|
- String billNo = financeProfitList.stream().map(FinanceProfit::getBillNo).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
|
|
|
+ financeProfitList = financeProfitMapper.financeProfit(financeProfit, page);
|
|
|
+ String billNo = financeProfitList.stream().map(FinanceProfitDtoList::getBillNo).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
|
|
|
LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
|
|
|
.eq(Amends::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(Amends::getIsDeleted, 0)
|
|
|
@@ -114,14 +119,14 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
.in(FeeCenter::getPid, pids));
|
|
|
}
|
|
|
}
|
|
|
- List<FinanceProfit> financeProfits = new ArrayList<>();
|
|
|
- for (FinanceProfit item : financeProfitList) {
|
|
|
+ List<FinanceProfitDtoList> financeProfits = new ArrayList<>();
|
|
|
+ for (FinanceProfitDtoList item : financeProfitList) {
|
|
|
if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
|
|
|
//获取当前业务类型所有amend
|
|
|
List<Amends> amends = amendsList.stream().filter(e -> e.getBillNo().equals(item.getBillNo())).collect(Collectors.toList());
|
|
|
for (Amends i : amends) {
|
|
|
//当前业务不属于当期业务,需新插入一条记录
|
|
|
- FinanceProfit financeProfit1 = new FinanceProfit();
|
|
|
+ FinanceProfitDtoList financeProfit1 = new FinanceProfitDtoList();
|
|
|
financeProfit1.setBillType(i.getBusinessType());
|
|
|
financeProfit1.setBillNo(i.getBillNo());
|
|
|
financeProfit1.setHBlNo(i.getHblno());
|
|
|
@@ -147,35 +152,35 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
//人民币应收金额
|
|
|
BigDecimal feeCentersCD = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//人民币实收金额
|
|
|
BigDecimal feeCentersCDReal = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//人民币应付金额
|
|
|
BigDecimal feeCentersCC = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//人民币实付金额
|
|
|
BigDecimal feeCentersCCReal = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//美金应收金额
|
|
|
BigDecimal feeCentersUD = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//美金实收金额
|
|
|
BigDecimal feeCentersUDReal = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//美金应付金额
|
|
|
BigDecimal feeCentersUC = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//美金实付金额
|
|
|
BigDecimal feeCentersUCReal = feeCenterList.stream()
|
|
|
.filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
- .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
//是否按审核日期
|
|
|
if (ObjectUtils.isNotNull(financeProfit.getExamineDate())) {
|
|
|
//是否为本期 true 合并 false 不合并
|
|
|
@@ -185,31 +190,31 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
item.setRealAmountCr(feeCentersCCReal);
|
|
|
item.setAmountCrUsd(feeCentersUC);
|
|
|
item.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
- item.setAmountCrLoc(feeCentersCC.add(bCurrencyService.converterCny("USD", feeCentersUC, "C")));
|
|
|
- item.setRealAmountCrLoc(feeCentersCCReal.add(bCurrencyService.converterCny("USD", feeCentersUCReal, "C")));
|
|
|
+ item.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
item.setAmountDr(feeCentersCD);
|
|
|
item.setRealAmountDr(feeCentersCDReal);
|
|
|
item.setAmountDrUsd(feeCentersUD);
|
|
|
item.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
- item.setAmountDrLoc(feeCentersCD.add(bCurrencyService.converterCny("USD", feeCentersUD, "C")));
|
|
|
- item.setRealAmountDrLoc(feeCentersCDReal.add(bCurrencyService.converterCny("USD", feeCentersUDReal, "C")));
|
|
|
- item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
|
|
|
- item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()));
|
|
|
+ item.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
} else {
|
|
|
financeProfit1.setAmountCr(feeCentersCC);
|
|
|
financeProfit1.setRealAmountCr(feeCentersCCReal);
|
|
|
financeProfit1.setAmountCrUsd(feeCentersUC);
|
|
|
financeProfit1.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
- financeProfit1.setAmountCrLoc(feeCentersCC.add(bCurrencyService.converterCny("USD", feeCentersUC, "C")));
|
|
|
- financeProfit1.setRealAmountCrLoc(feeCentersCCReal.add(bCurrencyService.converterCny("USD", feeCentersUCReal, "C")));
|
|
|
+ financeProfit1.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
financeProfit1.setAmountDr(feeCentersCD);
|
|
|
financeProfit1.setRealAmountDr(feeCentersCDReal);
|
|
|
financeProfit1.setAmountDrUsd(feeCentersUD);
|
|
|
financeProfit1.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
- financeProfit1.setAmountDrLoc(feeCentersCD.add(bCurrencyService.converterCny("USD", feeCentersUD, "C")));
|
|
|
- financeProfit1.setRealAmountDrLoc(feeCentersCDReal.add(bCurrencyService.converterCny("USD", feeCentersUDReal, "C")));
|
|
|
- financeProfit1.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
|
|
|
- financeProfit1.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()));
|
|
|
+ financeProfit1.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
}
|
|
|
} else {
|
|
|
//是否为本期 true 合并 false 不合并
|
|
|
@@ -219,31 +224,31 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
item.setRealAmountCr(feeCentersCCReal);
|
|
|
item.setAmountCrUsd(feeCentersUC);
|
|
|
item.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
- item.setAmountCrLoc(feeCentersCC.add(bCurrencyService.converterCny("USD", feeCentersUC, "C")));
|
|
|
- item.setRealAmountCrLoc(feeCentersCCReal.add(bCurrencyService.converterCny("USD", feeCentersUCReal, "C")));
|
|
|
+ item.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
item.setAmountDr(feeCentersCD);
|
|
|
item.setRealAmountDr(feeCentersCDReal);
|
|
|
item.setAmountDrUsd(feeCentersUD);
|
|
|
item.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
- item.setAmountDrLoc(feeCentersCD.add(bCurrencyService.converterCny("USD", feeCentersUD, "C")));
|
|
|
- item.setRealAmountDrLoc(feeCentersCDReal.add(bCurrencyService.converterCny("USD", feeCentersUDReal, "C")));
|
|
|
- item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
|
|
|
- item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()));
|
|
|
+ item.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
} else {
|
|
|
financeProfit1.setAmountCr(feeCentersCC);
|
|
|
financeProfit1.setRealAmountCr(feeCentersCCReal);
|
|
|
financeProfit1.setAmountCrUsd(feeCentersUC);
|
|
|
financeProfit1.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
- financeProfit1.setAmountCrLoc(feeCentersCC.add(bCurrencyService.converterCny("USD", feeCentersUC, "C")));
|
|
|
- financeProfit1.setRealAmountCrLoc(feeCentersCCReal.add(bCurrencyService.converterCny("USD", feeCentersUCReal, "C")));
|
|
|
+ financeProfit1.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
financeProfit1.setAmountDr(feeCentersCD);
|
|
|
financeProfit1.setRealAmountDr(feeCentersCDReal);
|
|
|
financeProfit1.setAmountDrUsd(feeCentersUD);
|
|
|
financeProfit1.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
- financeProfit1.setAmountDrLoc(feeCentersCD.add(bCurrencyService.converterCny("USD", feeCentersUD, "C")));
|
|
|
- financeProfit1.setRealAmountDrLoc(feeCentersCDReal.add(bCurrencyService.converterCny("USD", feeCentersUDReal, "C")));
|
|
|
- financeProfit1.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()));
|
|
|
- financeProfit1.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()));
|
|
|
+ financeProfit1.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
}
|
|
|
}
|
|
|
} catch (ParseException e) {
|
|
|
@@ -256,15 +261,21 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
}
|
|
|
financeProfitList.addAll(financeProfits);
|
|
|
} else {
|
|
|
- List<FinanceProfit> financeProfitListBg = amendsMapper.financeProfit(financeProfit);
|
|
|
+ financeProfit.setBillType(financeProfit.getBillType() + ",SEA,SIA,AEA,AIA");
|
|
|
+ financeProfitList = financeProfitMapper.financeProfit(financeProfit, page);
|
|
|
+ /*List<FinanceProfitDtoList> financeProfitListBg = amendsMapper.financeProfit(financeProfit);
|
|
|
if (!financeProfitListBg.isEmpty()) {
|
|
|
financeProfitList.addAll(financeProfitListBg);
|
|
|
- }
|
|
|
+ }*/
|
|
|
}
|
|
|
- for (FinanceProfit item : financeProfitList) {
|
|
|
+ for (FinanceProfitDtoList item : financeProfitList) {
|
|
|
if (null != item) {
|
|
|
- item.setRealAmountProfitLoc((ObjectUtils.isNotNull(item.getRealAmountDrLoc()) ? item.getRealAmountDrLoc() : new BigDecimal("0"))
|
|
|
- .subtract((ObjectUtils.isNotNull(item.getRealAmountCrLoc()) ? item.getRealAmountCrLoc() : new BigDecimal("0"))));
|
|
|
+ item.setAmountCrLoc(item.getAmountCrUsd().multiply(exrateC).add(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountCrLoc(item.getRealAmountCrUsd().multiply(exrateC).add(item.getRealAmountCr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountDrLoc(item.getAmountDrUsd().multiply(exrateC).add(item.getAmountDr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountDrLoc(item.getRealAmountDrUsd().multiply(exrateC).add(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
}
|
|
|
}
|
|
|
return R.data(page.setRecords(financeProfitList));
|
|
|
@@ -683,4 +694,204 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
public List<AgingAnalysisRD> agingAnalysisExport(FeeSummaryQ feeSummaryQ) {
|
|
|
return finAccBillsMapper.agingAnalysisExport(feeSummaryQ);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R financeProfitSum(FinanceProfitDtoList financeProfit) {
|
|
|
+ List<FinanceProfitDtoList> financeProfitList = new ArrayList<>();
|
|
|
+ BigDecimal exrateC = bCurrencyService.getCnyExrate("USD", "C");
|
|
|
+ BigDecimal exrateD = bCurrencyService.getCnyExrate("USD", "D");
|
|
|
+ //是否合并amend费用 true 合并 false 不合并
|
|
|
+ if (ObjectUtils.isNotNull(financeProfit.getMergeAmendFee())) {
|
|
|
+ financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);
|
|
|
+ String billNo = financeProfitList.stream().map(FinanceProfitDtoList::getBillNo).filter(Objects::nonNull).distinct().collect(Collectors.joining(","));
|
|
|
+ LambdaQueryWrapper<Amends> lambdaQueryWrapper = new LambdaQueryWrapper<Amends>()
|
|
|
+ .eq(Amends::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Amends::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(orig_bill_no,'" + billNo + "')");
|
|
|
+ if (ObjectUtils.isNotNull(financeProfit.getExamine())) {
|
|
|
+ lambdaQueryWrapper.eq(Amends::getStatus, 3);
|
|
|
+ }
|
|
|
+ List<Amends> amendsList = amendsMapper.selectList(lambdaQueryWrapper);
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ if (!amendsList.isEmpty()) {
|
|
|
+ List<Long> pids = amendsList.stream().map(Amends::getId).collect(Collectors.toList());
|
|
|
+ if (!pids.isEmpty()) {
|
|
|
+ feeCenterList = feeCenterMapper.selectList(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .in(FeeCenter::getPid, pids));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<FinanceProfitDtoList> financeProfits = new ArrayList<>();
|
|
|
+ for (FinanceProfitDtoList item : financeProfitList) {
|
|
|
+ if (!amendsList.isEmpty() && !feeCenterList.isEmpty()) {
|
|
|
+ //获取当前业务类型所有amend
|
|
|
+ List<Amends> amends = amendsList.stream().filter(e -> e.getBillNo().equals(item.getBillNo())).collect(Collectors.toList());
|
|
|
+ for (Amends i : amends) {
|
|
|
+ //当前业务不属于当期业务,需新插入一条记录
|
|
|
+ FinanceProfitDtoList financeProfit1 = new FinanceProfitDtoList();
|
|
|
+ financeProfit1.setBillType(i.getBusinessType());
|
|
|
+ financeProfit1.setBillNo(i.getBillNo());
|
|
|
+ financeProfit1.setHBlNo(i.getHblno());
|
|
|
+ financeProfit1.setMBlNo(i.getMblno());
|
|
|
+ financeProfit1.setCorpName(i.getCorpCnName());
|
|
|
+ financeProfit1.setSalesman(i.getOperatorName());
|
|
|
+ financeProfit1.setPod(i.getPodCnName());
|
|
|
+ financeProfit1.setPol(i.getPolCnName());
|
|
|
+ financeProfit1.setVesselCnName(i.getVesselCnName());
|
|
|
+ financeProfit1.setVoyageNo(i.getVoyageNo());
|
|
|
+ financeProfit1.setLineCnName(i.getLineCnName());
|
|
|
+ financeProfit1.setCarrierCnName(i.getCarrierCnName());
|
|
|
+ financeProfit1.setOperatorName(i.getOperatorName());
|
|
|
+ Date statisticsDateStart;
|
|
|
+ Date statisticsDateEnd;
|
|
|
+ DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
|
|
|
+ //判断账期时间是否为空
|
|
|
+ if (ObjectUtils.isNotNull(financeProfit.getStatisticsDateStart()) &&
|
|
|
+ ObjectUtils.isNotNull(financeProfit.getStatisticsDateEnd())) {
|
|
|
+ try {
|
|
|
+ statisticsDateStart = dateFormat.parse(financeProfit.getStatisticsDateStart());
|
|
|
+ statisticsDateEnd = dateFormat.parse(financeProfit.getStatisticsDateEnd());
|
|
|
+ //人民币应收金额
|
|
|
+ BigDecimal feeCentersCD = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //人民币实收金额
|
|
|
+ BigDecimal feeCentersCDReal = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //人民币应付金额
|
|
|
+ BigDecimal feeCentersCC = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //人民币实付金额
|
|
|
+ BigDecimal feeCentersCCReal = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "CNY".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //美金应收金额
|
|
|
+ BigDecimal feeCentersUD = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //美金实收金额
|
|
|
+ BigDecimal feeCentersUDReal = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "D".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //美金应付金额
|
|
|
+ BigDecimal feeCentersUC = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //美金实付金额
|
|
|
+ BigDecimal feeCentersUCReal = feeCenterList.stream()
|
|
|
+ .filter(e -> i.getId().equals(e.getPid()) && "USD".equals(e.getCurCode()) && "C".equals(e.getDc()))
|
|
|
+ .map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add).setScale(2, RoundingMode.HALF_UP);
|
|
|
+ //是否按审核日期
|
|
|
+ if (ObjectUtils.isNotNull(financeProfit.getExamineDate())) {
|
|
|
+ //是否为本期 true 合并 false 不合并
|
|
|
+ if (i.getApprovedDate().compareTo(statisticsDateStart) >= 0 &&
|
|
|
+ i.getApprovedDate().compareTo(statisticsDateEnd) <= 0) {
|
|
|
+ item.setAmountCr(feeCentersCC);
|
|
|
+ item.setRealAmountCr(feeCentersCCReal);
|
|
|
+ item.setAmountCrUsd(feeCentersUC);
|
|
|
+ item.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
+ item.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountDr(feeCentersCD);
|
|
|
+ item.setRealAmountDr(feeCentersCDReal);
|
|
|
+ item.setAmountDrUsd(feeCentersUD);
|
|
|
+ item.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
+ item.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ financeProfit1.setAmountCr(feeCentersCC);
|
|
|
+ financeProfit1.setRealAmountCr(feeCentersCCReal);
|
|
|
+ financeProfit1.setAmountCrUsd(feeCentersUC);
|
|
|
+ financeProfit1.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
+ financeProfit1.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setAmountDr(feeCentersCD);
|
|
|
+ financeProfit1.setRealAmountDr(feeCentersCDReal);
|
|
|
+ financeProfit1.setAmountDrUsd(feeCentersUD);
|
|
|
+ financeProfit1.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
+ financeProfit1.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ //是否为本期 true 合并 false 不合并
|
|
|
+ if (i.getBillDate().compareTo(statisticsDateStart) >= 0 &&
|
|
|
+ i.getBillDate().compareTo(statisticsDateEnd) <= 0) {
|
|
|
+ item.setAmountCr(feeCentersCC);
|
|
|
+ item.setRealAmountCr(feeCentersCCReal);
|
|
|
+ item.setAmountCrUsd(feeCentersUC);
|
|
|
+ item.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
+ item.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountDr(feeCentersCD);
|
|
|
+ item.setRealAmountDr(feeCentersCDReal);
|
|
|
+ item.setAmountDrUsd(feeCentersUD);
|
|
|
+ item.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
+ item.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ financeProfit1.setAmountCr(feeCentersCC);
|
|
|
+ financeProfit1.setRealAmountCr(feeCentersCCReal);
|
|
|
+ financeProfit1.setAmountCrUsd(feeCentersUC);
|
|
|
+ financeProfit1.setRealAmountCrUsd(feeCentersUCReal);
|
|
|
+ financeProfit1.setAmountCrLoc(feeCentersUC.multiply(exrateC).add(feeCentersCC).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountCrLoc(feeCentersUCReal.multiply(exrateC).add(feeCentersCCReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setAmountDr(feeCentersCD);
|
|
|
+ financeProfit1.setRealAmountDr(feeCentersCDReal);
|
|
|
+ financeProfit1.setAmountDrUsd(feeCentersUD);
|
|
|
+ financeProfit1.setRealAmountDrUsd(feeCentersUDReal);
|
|
|
+ financeProfit1.setAmountDrLoc(feeCentersUD.multiply(exrateD).add(feeCentersCD).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountDrLoc(feeCentersUDReal.multiply(exrateD).add(feeCentersCDReal).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ financeProfit1.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ financeProfits.add(financeProfit1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ financeProfitList.addAll(financeProfits);
|
|
|
+ } else {
|
|
|
+ financeProfit.setBillType(financeProfit.getBillType() + ",SEA,SIA,AEA,AIA");
|
|
|
+ financeProfitList = financeProfitMapper.financeProfitSum(financeProfit);
|
|
|
+ }
|
|
|
+ for (FinanceProfitDtoList item : financeProfitList) {
|
|
|
+ if (null != item) {
|
|
|
+ item.setAmountCrLoc(item.getAmountCrUsd().multiply(exrateC).add(item.getAmountCr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountCrLoc(item.getRealAmountCrUsd().multiply(exrateC).add(item.getRealAmountCr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountDrLoc(item.getAmountDrUsd().multiply(exrateC).add(item.getAmountDr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountDrLoc(item.getRealAmountDrUsd().multiply(exrateC).add(item.getRealAmountDr()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setAmountProfitLoc(item.getAmountDrLoc().subtract(item.getAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ item.setRealAmountProfitLoc(item.getRealAmountDrLoc().subtract(item.getRealAmountCrLoc()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Map<String, BigDecimal> map = new HashMap<>();
|
|
|
+ map.put("amountDrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountDrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("amountDr", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDr).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountDr", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDr).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("amountDrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountDrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountDrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("amountCrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountCrUsd", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCrUsd).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("amountCr", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCr).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountCr", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCr).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("amountCrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountCrLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountCrLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("amountProfitLoc", financeProfitList.stream().map(FinanceProfitDtoList::getAmountProfitLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ map.put("realAmountProfitLoc", financeProfitList.stream().map(FinanceProfitDtoList::getRealAmountProfitLoc).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ return R.data(map);
|
|
|
+ }
|
|
|
}
|