|
|
@@ -1,16 +1,30 @@
|
|
|
package org.springblade.los.statisticAnalysis.service.impl;
|
|
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
|
|
import lombok.AllArgsConstructor;
|
|
|
+import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
-import org.springblade.los.statisticAnalysis.DecisionAnalysis;
|
|
|
+import org.springblade.los.basic.cur.service.IBCurrencyService;
|
|
|
+import org.springblade.los.business.aea.mapper.AeaBillsMapper;
|
|
|
+import org.springblade.los.business.amends.entity.Amends;
|
|
|
+import org.springblade.los.business.amends.mapper.AmendsMapper;
|
|
|
import org.springblade.los.business.sea.mapper.BillsMapper;
|
|
|
+import org.springblade.los.business.sea.mapper.ContainersBillsMapper;
|
|
|
+import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
+import org.springblade.los.finance.fee.mapper.FeeCenterMapper;
|
|
|
+import org.springblade.los.statisticAnalysis.DecisionAnalysis;
|
|
|
import org.springblade.los.statisticAnalysis.FinanceProfit;
|
|
|
import org.springblade.los.statisticAnalysis.service.IStatisticAnalysisService;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.text.DateFormat;
|
|
|
+import java.text.ParseException;
|
|
|
+import java.text.SimpleDateFormat;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
* @author :jixinyuan
|
|
|
@@ -21,6 +35,11 @@ import java.util.Map;
|
|
|
public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
|
|
|
private final BillsMapper billsMapper;
|
|
|
+ private final AeaBillsMapper aeaBillsMapper;
|
|
|
+ private final ContainersBillsMapper containersBillsMapper;
|
|
|
+ private final AmendsMapper amendsMapper;
|
|
|
+ private final FeeCenterMapper feeCenterMapper;
|
|
|
+ private final IBCurrencyService bCurrencyService;
|
|
|
|
|
|
@Override
|
|
|
public R<IPage<DecisionAnalysis>> decisionAnalysis(DecisionAnalysis decisionAnalysis, IPage<DecisionAnalysis> page) {
|
|
|
@@ -41,7 +60,192 @@ public class StatisticAnalysisServiceImpl implements IStatisticAnalysisService {
|
|
|
|
|
|
@Override
|
|
|
public R<IPage<FinanceProfit>> financeProfit(FinanceProfit financeProfit, IPage<FinanceProfit> page) {
|
|
|
- List<FinanceProfit> financeProfitList = billsMapper.financeProfit(financeProfit, page);
|
|
|
+ List<FinanceProfit> financeProfitList = new ArrayList<>();
|
|
|
+ if (financeProfit.getBillType().contains("HYCK") || financeProfit.getBillType().contains("HYJK")) {
|
|
|
+ List<FinanceProfit> financeProfitListHy = billsMapper.financeProfit(financeProfit);
|
|
|
+ if (!financeProfitListHy.isEmpty()) {
|
|
|
+ financeProfitList.addAll(financeProfitListHy);
|
|
|
+ }
|
|
|
+ } else if (financeProfit.getBillType().contains("KYCK") || financeProfit.getBillType().contains("KYJK")) {
|
|
|
+ List<FinanceProfit> 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 = containersBillsMapper.financeProfit(financeProfit);
|
|
|
+ if (!financeProfitListBg.isEmpty()) {
|
|
|
+ financeProfitList.addAll(financeProfitListBg);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //是否合并amend费用 true 合并 false 不合并
|
|
|
+ if (ObjectUtils.isNotNull(financeProfit.getMergeAmendFee())) {
|
|
|
+ String billNo = financeProfitList.stream().map(FinanceProfit::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<FinanceProfit> financeProfits = new ArrayList<>();
|
|
|
+ for (FinanceProfit 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();
|
|
|
+ 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);
|
|
|
+ //人民币实收金额
|
|
|
+ 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);
|
|
|
+ //人民币应付金额
|
|
|
+ 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);
|
|
|
+ //人民币实付金额
|
|
|
+ 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);
|
|
|
+ //美金应收金额
|
|
|
+ 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);
|
|
|
+ //美金实收金额
|
|
|
+ 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);
|
|
|
+ //美金应付金额
|
|
|
+ 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);
|
|
|
+ //美金实付金额
|
|
|
+ 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);
|
|
|
+ //是否按审核日期
|
|
|
+ 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(feeCentersCC.add(bCurrencyService.converterCny("USD", feeCentersUC, "C")));
|
|
|
+ item.setRealAmountCrLoc(feeCentersCCReal.add(bCurrencyService.converterCny("USD", feeCentersUCReal, "C")));
|
|
|
+ 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()));
|
|
|
+ } 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.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()));
|
|
|
+ }
|
|
|
+ } 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(feeCentersCC.add(bCurrencyService.converterCny("USD", feeCentersUC, "C")));
|
|
|
+ item.setRealAmountCrLoc(feeCentersCCReal.add(bCurrencyService.converterCny("USD", feeCentersUCReal, "C")));
|
|
|
+ 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()));
|
|
|
+ } 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.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()));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } catch (ParseException e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ financeProfits.add(financeProfit1);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ financeProfitList.addAll(financeProfits);
|
|
|
+ } else {
|
|
|
+ List<FinanceProfit> financeProfitListBg = amendsMapper.financeProfit(financeProfit);
|
|
|
+ if (!financeProfitListBg.isEmpty()) {
|
|
|
+ financeProfitList.addAll(financeProfitListBg);
|
|
|
+ }
|
|
|
+ }
|
|
|
return R.data(page.setRecords(financeProfitList));
|
|
|
}
|
|
|
}
|