|
@@ -3,10 +3,13 @@ package com.fjhx.sale.service.statement.impl;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import cn.hutool.core.util.StrUtil;
|
|
|
import com.alibaba.fastjson2.JSON;
|
|
|
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.fjhx.account.entity.account.po.AccountRunningWater;
|
|
|
+import com.fjhx.account.entity.tax.po.TaxRefundDetails;
|
|
|
import com.fjhx.account.service.account.AccountRunningWaterService;
|
|
|
+import com.fjhx.account.service.tax.TaxRefundDetailsService;
|
|
|
import com.fjhx.common.entity.currency.po.CurrencyRate;
|
|
|
import com.fjhx.common.service.currency.CurrencyRateService;
|
|
|
import com.fjhx.customer.service.customer.CustomerService;
|
|
@@ -27,6 +30,7 @@ import com.fjhx.sale.service.statement.SaleStatementService;
|
|
|
import com.github.pagehelper.util.StringUtil;
|
|
|
import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
import com.ruoyi.system.utils.UserUtil;
|
|
|
+import org.apache.commons.collections4.MapUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
@@ -51,6 +55,9 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
private CurrencyRateService currencyRateService;
|
|
|
|
|
|
@Autowired
|
|
|
+ private TaxRefundDetailsService taxRefundDetailsService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
private ClaimContractService claimContractService;
|
|
|
|
|
|
@Autowired
|
|
@@ -88,7 +95,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
Map<Long, Map<String, BigDecimal>> detailsRateMap = getDetailsRateMap(records, defaultRateMap);
|
|
|
|
|
|
// 赋值合同到账
|
|
|
- setContractArrival(list);
|
|
|
+ setContractArrivalAndRefundMoney(list);
|
|
|
|
|
|
// 赋值采购合同金额和支付货款
|
|
|
setPurchaseAmountAndPayForGoods(list, detailsRateMap);
|
|
@@ -180,7 +187,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
/**
|
|
|
* 赋值合同到账金额
|
|
|
*/
|
|
|
- private void setContractArrival(List<ProfitSettlementVo> list) {
|
|
|
+ private void setContractArrivalAndRefundMoney(List<ProfitSettlementVo> list) {
|
|
|
|
|
|
// // 合同id
|
|
|
// List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
|
|
@@ -243,6 +250,11 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
//通过合同ID查询到账认领合同的数据
|
|
|
List<ClaimContract> claimContractList = claimContractService.getListByContractIds(contractIdList);
|
|
|
Map<Long,List<ClaimContract>> claimContractMap = claimContractList.stream().collect(Collectors.groupingBy(ClaimContract::getContractId));
|
|
|
+
|
|
|
+ //通过合同ID查询到退税数据
|
|
|
+ List<TaxRefundDetails> refundDetails = taxRefundDetailsService.getSumMoneyByContractIds(contractIdList);
|
|
|
+ Map<Long,List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
|
|
|
+
|
|
|
for(ProfitSettlementVo p:list){
|
|
|
if(StringUtil.isNotEmpty(p.getCurrencyRateJson())){//取设置的汇率
|
|
|
List<CurrencyRate> assignCurrencyRatesList = JSON.parseArray(p.getCurrencyRateJson(), CurrencyRate.class);
|
|
@@ -251,7 +263,6 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
* 处理到账金额
|
|
|
*/
|
|
|
List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),null);
|
|
|
- List<BigDecimal> sumArrayMoney = new ArrayList<>();
|
|
|
BigDecimal contractArrival = cList.stream().map(claimContract -> {
|
|
|
//获取汇率
|
|
|
BigDecimal rate = assignCurrencyRatesMap.getOrDefault(claimContract.getCurrency(),BigDecimal.ONE);
|
|
@@ -262,26 +273,53 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
}).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
p.setContractArrival(contractArrival);
|
|
|
/**
|
|
|
- * 处理合同金额
|
|
|
+ * 处理退税金额
|
|
|
*/
|
|
|
+ List<TaxRefundDetails> rList = refundDetailsMap.getOrDefault(p.getContractId(),null);
|
|
|
+ BigDecimal taxReturnMoney = rList.stream().map(taxRefundDetails -> {
|
|
|
+ //获取汇率
|
|
|
+ BigDecimal rate = assignCurrencyRatesMap.getOrDefault(taxRefundDetails.getCurrency(),BigDecimal.ONE);
|
|
|
+ // 获取认领金额
|
|
|
+ BigDecimal money = taxRefundDetails.getAmount();
|
|
|
+ // 返回兑人民币后金额
|
|
|
+ return rate.multiply(money);
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ p.setTaxReturnMoney(taxReturnMoney);
|
|
|
}else{//取数据汇率
|
|
|
/**
|
|
|
* 处理到账金额
|
|
|
*/
|
|
|
- List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),null);
|
|
|
+ List<ClaimContract> cList = claimContractMap.getOrDefault(p.getContractId(),new ArrayList<>());
|
|
|
List<Long> warterIds = cList.stream().distinct().map(ClaimContract::getBusinessId).collect(Collectors.toList());
|
|
|
- //查出流水
|
|
|
- List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().select(AccountRunningWater::getRate,AccountRunningWater::getId).in(AccountRunningWater::getId,warterIds));
|
|
|
- Map<Long,BigDecimal> waterMap = accountRunningWaterList.stream().collect(Collectors.toMap(AccountRunningWater::getId, AccountRunningWater::getRate));
|
|
|
- BigDecimal contractArrival = cList.stream().map(claimContract -> {
|
|
|
+ if(CollectionUtils.isEmpty(warterIds)){
|
|
|
+ p.setContractArrival(BigDecimal.ZERO);
|
|
|
+ }else{
|
|
|
+ //查出流水
|
|
|
+ List<AccountRunningWater> accountRunningWaterList = accountRunningWaterService.list(Wrappers.<AccountRunningWater>query().lambda().select(AccountRunningWater::getRate,AccountRunningWater::getId).in(AccountRunningWater::getId,warterIds));
|
|
|
+ Map<Long,BigDecimal> waterMap = accountRunningWaterList.stream().collect(Collectors.toMap(AccountRunningWater::getId, AccountRunningWater::getRate));
|
|
|
+ BigDecimal contractArrival = cList.stream().map(claimContract -> {
|
|
|
+ //获取汇率
|
|
|
+ BigDecimal rate = waterMap.getOrDefault(claimContract.getBusinessId(),BigDecimal.ONE);
|
|
|
+ // 获取认领金额
|
|
|
+ BigDecimal money = claimContract.getMoney();
|
|
|
+ // 返回兑人民币后金额
|
|
|
+ return rate.multiply(money);
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ p.setContractArrival(contractArrival);
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 处理退税金额
|
|
|
+ */
|
|
|
+ List<TaxRefundDetails> rList = refundDetailsMap.getOrDefault(p.getContractId(),null);
|
|
|
+ BigDecimal taxReturnMoney = rList.stream().map(taxRefundDetails -> {
|
|
|
//获取汇率
|
|
|
- BigDecimal rate = waterMap.getOrDefault(claimContract.getBusinessId(),BigDecimal.ONE);
|
|
|
+ BigDecimal rate = taxRefundDetails.getRate();
|
|
|
// 获取认领金额
|
|
|
- BigDecimal money = claimContract.getMoney();
|
|
|
+ BigDecimal money = taxRefundDetails.getAmount();
|
|
|
// 返回兑人民币后金额
|
|
|
return rate.multiply(money);
|
|
|
}).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- p.setContractArrival(contractArrival);
|
|
|
+ p.setTaxReturnMoney(taxReturnMoney);
|
|
|
}
|
|
|
}
|
|
|
|