|
|
@@ -33,14 +33,26 @@ import org.springblade.los.basic.reports.service.IReportsService;
|
|
|
import org.springblade.los.basic.reports.vo.ReportsVO;
|
|
|
import org.springblade.los.business.sea.entity.Bills;
|
|
|
import org.springblade.los.business.sea.service.IBillsService;
|
|
|
+import org.springblade.los.finance.agreement.entity.AgreementPrice;
|
|
|
+import org.springblade.los.finance.agreement.entity.AgreementPriceItems;
|
|
|
+import org.springblade.los.finance.agreement.service.IAgreementPriceItemsService;
|
|
|
+import org.springblade.los.finance.agreement.service.IAgreementPriceService;
|
|
|
import org.springblade.los.finance.fee.dto.FeeCenterReports;
|
|
|
import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
import org.springblade.los.finance.fee.service.IFeeCenterService;
|
|
|
+import org.springblade.los.finance.stl.dto.FinStlBillsItemsReports;
|
|
|
+import org.springblade.los.finance.stl.entity.FinStlBills;
|
|
|
+import org.springblade.los.finance.stl.entity.FinStlBillsItems;
|
|
|
+import org.springblade.los.finance.stl.service.IFinStlBillsItemsService;
|
|
|
+import org.springblade.los.finance.stl.service.IFinStlBillsService;
|
|
|
import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.ConcurrentHashMap;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.function.Predicate;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -61,8 +73,16 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
|
|
|
|
|
|
private final IFeeCenterService feeCenterService;
|
|
|
|
|
|
+ private final IFinStlBillsService finStlBillsService;
|
|
|
+
|
|
|
+ private final IFinStlBillsItemsService finStlBillsItemsService;
|
|
|
+
|
|
|
private final IBCurrencyService ibCurrencyService;
|
|
|
|
|
|
+ private final IAgreementPriceService agreementPriceService;
|
|
|
+
|
|
|
+ private final IAgreementPriceItemsService agreementPriceItemsService;
|
|
|
+
|
|
|
|
|
|
@Override
|
|
|
public IPage<ReportsVO> selectReportsPage(IPage<ReportsVO> page, ReportsVO reports) {
|
|
|
@@ -263,13 +283,13 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
|
|
|
}
|
|
|
bills.setFeeCenterList(feeCenterReportList);
|
|
|
}
|
|
|
- list.add(0,bills);
|
|
|
+ list.add(0, bills);
|
|
|
} else if ("MH".equals(bills.getBillType())) {
|
|
|
Bills details = billsService.getOne(new LambdaQueryWrapper<Bills>()
|
|
|
.eq(Bills::getId, bills.getMasterId())
|
|
|
.eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(Bills::getIsDeleted, 0));
|
|
|
- if (details != null){
|
|
|
+ if (details != null) {
|
|
|
List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
.eq(FeeCenter::getPid, bills.getId())
|
|
|
.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
@@ -401,7 +421,7 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
|
|
|
feeCenterReportList.add(feeCenterReports);
|
|
|
}
|
|
|
details.setFeeCenterList(feeCenterReportList);
|
|
|
- list.add(0,details);
|
|
|
+ list.add(0, details);
|
|
|
}
|
|
|
}
|
|
|
map.put("data", list);
|
|
|
@@ -653,8 +673,138 @@ public class ReportsServiceImpl extends ServiceImpl<ReportsMapper, Reports> impl
|
|
|
} else {
|
|
|
map.put("data", null);
|
|
|
}
|
|
|
+ } else if ("付费申请".equals(reportCode) && "付费申请".equals(groupCode)) {
|
|
|
+ FinStlBills finStlBills = finStlBillsService.getById(billId);
|
|
|
+ if (finStlBills != null) {
|
|
|
+ finStlBills.setBankAccountBank(finStlBills.getBankAccountBank() + "/" + finStlBills.getBankAccountNo());
|
|
|
+ if (agreementPriceService.count(new LambdaQueryWrapper<AgreementPrice>()
|
|
|
+ .eq(AgreementPrice::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(AgreementPrice::getIsDeleted, 0)
|
|
|
+ .eq(AgreementPrice::getStatus, 0)
|
|
|
+ .eq(AgreementPrice::getCorpId, finStlBills.getCorpId())) > 0) {
|
|
|
+ finStlBills.setAgreement("是");
|
|
|
+ } else {
|
|
|
+ finStlBills.setAgreement("否");
|
|
|
+ }
|
|
|
+ BigDecimal amountC = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountD = new BigDecimal("0.00");
|
|
|
+ List<FeeCenter> feeCenterListC = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getDc, "C")
|
|
|
+ .eq(FeeCenter::getAccStatus, "1")
|
|
|
+ .apply("amount != stl_ttl_amount")
|
|
|
+ .eq(FeeCenter::getCorpId, finStlBills.getCorpId()));
|
|
|
+ if (feeCenterListC.size() > 0) {
|
|
|
+ amountC = feeCenterListC.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ List<FeeCenter> feeCenterListD = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .eq(FeeCenter::getDc, "D")
|
|
|
+ .eq(FeeCenter::getAccStatus, "1")
|
|
|
+ .apply("amount != stl_ttl_amount")
|
|
|
+ .eq(FeeCenter::getCorpId, finStlBills.getCorpId()));
|
|
|
+ if (feeCenterListD.size() > 0) {
|
|
|
+ amountD = feeCenterListD.stream().map(FeeCenter::getAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ }
|
|
|
+ finStlBills.setAmountOwed(amountC.subtract(amountD));
|
|
|
+ List<FinStlBillsItemsReports> finStlBillsItemsReportsList = new ArrayList<>();
|
|
|
+ LambdaQueryWrapper<FinStlBillsItems> lambdaQueryWrapper = new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getPid, finStlBills.getId());
|
|
|
+ List<FinStlBillsItems> finStlBillsItems = finStlBillsItemsService.list(lambdaQueryWrapper);
|
|
|
+ if (finStlBillsItems.size() > 0) {
|
|
|
+ List<FinStlBillsItems> reducelList = finStlBillsItems.stream().filter(distinctByKey(FinStlBillsItems::getMblno)).collect(Collectors.toList());
|
|
|
+ List<Bills> billsList = new ArrayList<>();
|
|
|
+ if (reducelList.size() > 0) {
|
|
|
+ String mblno = reducelList.stream().map(FinStlBillsItems::getMblno).collect(Collectors.joining(","));
|
|
|
+ billsList = billsService.list(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .apply("find_in_set(mblno,'" + mblno + "')"));
|
|
|
+
|
|
|
+ if (billsList.size() > 0) {
|
|
|
+ List<Long> billCorpId = billsList.stream().map(Bills::getCorpId).distinct().collect(Collectors.toList());
|
|
|
+ List<AgreementPriceItems> agreementPriceItemsList = new ArrayList<>();
|
|
|
+ List<AgreementPrice> agreementPriceList = agreementPriceService.list(new LambdaQueryWrapper<AgreementPrice>()
|
|
|
+ .eq(AgreementPrice::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(AgreementPrice::getIsDeleted, 0)
|
|
|
+ .eq(AgreementPrice::getStatus, 0)
|
|
|
+ .in(AgreementPrice::getCorpId, billCorpId));
|
|
|
+ if (agreementPriceList.size() > 0) {
|
|
|
+ List<Long> ids = agreementPriceList.stream().map(AgreementPrice::getId).collect(Collectors.toList());
|
|
|
+ agreementPriceItemsList = agreementPriceItemsService.list(new LambdaQueryWrapper<AgreementPriceItems>()
|
|
|
+ .eq(AgreementPriceItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(AgreementPriceItems::getIsDeleted, 0)
|
|
|
+ .eq(AgreementPriceItems::getStatus, 0)
|
|
|
+ .in(AgreementPriceItems::getPid, ids));
|
|
|
+ }
|
|
|
+ StringBuilder billCorpName = new StringBuilder();
|
|
|
+ StringBuilder billCorpNameAgreement = new StringBuilder();
|
|
|
+ for (Bills item : billsList) {
|
|
|
+ billCorpName.append(item.getCorpCnName()).append("/");
|
|
|
+ AgreementPrice agreementPrice = agreementPriceList.stream().filter(e -> e.getCorpId().equals(item.getCorpId())).findFirst().orElse(null);
|
|
|
+ if (agreementPrice != null) {
|
|
|
+ AgreementPriceItems agreementPriceItems = agreementPriceItemsList.stream().filter(e -> e.getPid().equals(agreementPrice.getId())).findFirst().orElse(null);
|
|
|
+ if (agreementPriceItems != null) {
|
|
|
+ billCorpNameAgreement.append(agreementPriceItems.getSettlementPeriodName()).append("/");
|
|
|
+ } else {
|
|
|
+ billCorpNameAgreement.append("无").append("/");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ billCorpNameAgreement.append("无").append("/");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBills.setBillCorpName(billCorpName.toString());
|
|
|
+ finStlBills.setBillCorpNameAgreement(billCorpNameAgreement.toString());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (FinStlBillsItems item : reducelList) {
|
|
|
+ FinStlBillsItemsReports finStlBillsItemsReports = new FinStlBillsItemsReports();
|
|
|
+ finStlBillsItemsReports.setQuantityCntrTypesDescr(item.getQuantityCntrTypesDescr());
|
|
|
+ finStlBillsItemsReports.setMblno(item.getMblno());
|
|
|
+ finStlBillsItemsReports.setBillNo(item.getBillNo());
|
|
|
+ BigDecimal currentStlAmountD = finStlBillsItems.stream()
|
|
|
+ .filter(e -> e.getMblno().equals(item.getMblno()) && "D".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
|
|
|
+ .map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal currentStlAmountC = finStlBillsItems.stream()
|
|
|
+ .filter(e -> e.getMblno().equals(item.getMblno()) && "C".equals(e.getDc()) && "CNY".equals(e.getCurCode()))
|
|
|
+ .map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal currentStlAmountUsdD = finStlBillsItems.stream()
|
|
|
+ .filter(e -> e.getMblno().equals(item.getMblno()) && "D".equals(e.getDc()) && "USD".equals(e.getCurCode()))
|
|
|
+ .map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal currentStlAmountUsdC = finStlBillsItems.stream()
|
|
|
+ .filter(e -> e.getMblno().equals(item.getMblno()) && "C".equals(e.getDc()) && "USD".equals(e.getCurCode()))
|
|
|
+ .map(FinStlBillsItems::getCurrentStlAmount).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ finStlBillsItemsReports.setAmount(currentStlAmountC.subtract(currentStlAmountD).abs());
|
|
|
+ finStlBillsItemsReports.setAmountUsd(currentStlAmountUsdC.subtract(currentStlAmountUsdD).abs());
|
|
|
+ if (billsList.size() > 0) {
|
|
|
+ Bills bills = billsList.stream().filter(e -> e.getMblno().equals(item.getMblno())).findFirst().orElse(null);
|
|
|
+ if (bills != null) {
|
|
|
+ finStlBillsItemsReports.setAmountProfit(bills.getAmountCrLoc().subtract(bills.getAmountDrLoc()));
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ finStlBillsItemsReports.setAmountProfit(new BigDecimal("0.00"));
|
|
|
+ }
|
|
|
+ finStlBillsItemsReportsList.add(finStlBillsItemsReports);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finStlBills.setAmountSubLoc(finStlBills.getAmountSubLoc().abs());
|
|
|
+ finStlBills.setFinStlBillsItemsReportsList(finStlBillsItemsReportsList);
|
|
|
+ map.put("data", finStlBills);
|
|
|
+ } else {
|
|
|
+ map.put("data", null);
|
|
|
+ }
|
|
|
}
|
|
|
return R.data(map);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
|
|
|
+ Set<Object> seen = ConcurrentHashMap.newKeySet();
|
|
|
+ return t -> seen.add(keyExtractor.apply(t));
|
|
|
+ }
|
|
|
+
|
|
|
}
|