|
@@ -188,46 +188,62 @@ public class ContractServiceImpl extends ServiceImpl<ContractMapper, Contract>
|
|
|
List<ContractBudgetVo> list = page.getRecords();
|
|
|
if(CollectionUtils.isNotEmpty(list)){
|
|
|
List<Long> contractIds = list.stream().map(ContractBudgetVo::getContractId).collect(Collectors.toList());
|
|
|
- Map<Long,BigDecimal> ehsdAmountMap = ehsdPurchaseProductService.getGroupSumAmount(contractIds);
|
|
|
+ Map<Long,String> ehsdAmountMap = ehsdPurchaseProductService.getGroupSumAmount(contractIds);
|
|
|
List<PurchaseDetailVo> otherAmountList = purchaseDetailService.getSumCountInDataResourceIds(contractIds);
|
|
|
- Map<Long,BigDecimal> otherAmountMap = otherAmountList.stream().collect(Collectors.toMap(PurchaseDetailVo::getDataResourceId,PurchaseDetailVo::getSumCount));
|
|
|
+ Map<Long,String> otherAmountMap = otherAmountList.stream().collect(Collectors.toMap(PurchaseDetailVo::getDataResourceId,PurchaseDetailVo::getSumAmountCurrency));
|
|
|
List<CurrencyRate> currencyRateList = currencyRateService.getList();
|
|
|
Map<String,BigDecimal> currencyRateMap = currencyRateList.stream().collect(Collectors.toMap(CurrencyRate::getType,CurrencyRate::getRate));
|
|
|
for(ContractBudgetVo v : list){
|
|
|
- v.setRefundableAmount(BigDecimal.ZERO);//先设置退税金额
|
|
|
+ v.setRefundableAmount(BigDecimal.ZERO);//暂时先设置退税金额为0
|
|
|
if(MapUtils.isNotEmpty(ehsdAmountMap)){ //计算EHSD租户应付货款
|
|
|
- v.setEhsdSumAmount(ehsdAmountMap.getOrDefault(v.getContractId(),null));
|
|
|
+ String concatAmountCurrency = ehsdAmountMap.getOrDefault(v.getContractId(),null);
|
|
|
+ if(StringUtils.isNotEmpty(concatAmountCurrency)){
|
|
|
+ BigDecimal amount = new BigDecimal(concatAmountCurrency.split("-")[0]);
|
|
|
+ String currency = concatAmountCurrency.split("-")[1];
|
|
|
+ BigDecimal rate = currencyRateMap.getOrDefault(currency,BigDecimal.ONE);
|
|
|
+ v.setEhsdSumAmount(amount.multiply(rate));
|
|
|
+ }else{
|
|
|
+ v.setEhsdSumAmount(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
}
|
|
|
if(MapUtils.isNotEmpty(otherAmountMap)){ //计算其他租户应付货款
|
|
|
- v.setOtherumAmount(otherAmountMap.getOrDefault(v.getContractId(),null));
|
|
|
+ String concatAmountCurrency = otherAmountMap.getOrDefault(v.getContractId(),null);
|
|
|
+ if(StringUtils.isNotEmpty(concatAmountCurrency)){
|
|
|
+ BigDecimal amount = new BigDecimal(concatAmountCurrency.split("-")[0]);
|
|
|
+ String currency = concatAmountCurrency.split("-")[1];
|
|
|
+ BigDecimal rate = currencyRateMap.getOrDefault(currency,BigDecimal.ONE);
|
|
|
+ v.setOtherumAmount(amount.multiply(rate));
|
|
|
+ }else{
|
|
|
+ v.setOtherumAmount(BigDecimal.ZERO);
|
|
|
+ }
|
|
|
}
|
|
|
if(StringUtils.isNotEmpty(v.getCurrencyRateJson())){//如果此条合同有汇率了
|
|
|
Map<String,Object> map = JSON.parseObject(v.getCurrencyRateJson());
|
|
|
//计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
|
|
|
v.setIncomeAmount(v.getAmount().multiply(new BigDecimal(map.getOrDefault(v.getCurrency(), BigDecimal.ONE).toString())).add(v.getRefundableAmount()));
|
|
|
//计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
|
|
|
- v.setExpenditureAmount(v.getTrailerFee().multiply(new BigDecimal(map.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
|
|
|
- (v.getCustomsFee().multiply(new BigDecimal(map.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getAgencyFee().multiply(new BigDecimal(map.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getPortMixedFee().multiply(new BigDecimal(map.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getInspectionRedPack().multiply(new BigDecimal(map.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getCommission().multiply(new BigDecimal(map.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getOther().multiply(new BigDecimal(map.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getEhsdSumAmount()).add
|
|
|
- (v.getOtherumAmount()));
|
|
|
+ v.setExpenditureAmount(v.getTrailerFee()==null?BigDecimal.ZERO:v.getTrailerFee().multiply(new BigDecimal(map.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
|
|
|
+ (v.getCustomsFee()==null?BigDecimal.ZERO:v.getCustomsFee().multiply(new BigDecimal(map.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getAgencyFee()==null?BigDecimal.ZERO:v.getAgencyFee().multiply(new BigDecimal(map.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getPortMixedFee()==null?BigDecimal.ZERO:v.getPortMixedFee().multiply(new BigDecimal(map.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getInspectionRedPack()==null?BigDecimal.ZERO:v.getInspectionRedPack().multiply(new BigDecimal(map.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getCommission()==null?BigDecimal.ZERO:v.getCommission().multiply(new BigDecimal(map.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getOther()==null?BigDecimal.ZERO:v.getOther().multiply(new BigDecimal(map.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getEhsdSumAmount()==null?BigDecimal.ZERO:v.getEhsdSumAmount()).add
|
|
|
+ (v.getOtherumAmount()==null?BigDecimal.ZERO:v.getOtherumAmount()));
|
|
|
}else{//没有汇率取默认汇率
|
|
|
//计算收入总计=合同金额(转人民币)+应退税金额(转人民币)
|
|
|
v.setIncomeAmount(v.getAmount().multiply(currencyRateMap.getOrDefault(v.getContractId(),new BigDecimal("1"))).add(v.getRefundableAmount()));
|
|
|
//计算支出总计 除合同金额(转人民币)+应退税金额(转人民币) 其他金额相加
|
|
|
- v.setExpenditureAmount(v.getTrailerFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
|
|
|
- (v.getCustomsFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getAgencyFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getPortMixedFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getInspectionRedPack().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getCommission().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getOther().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
- (v.getEhsdSumAmount()).add
|
|
|
- (v.getOtherumAmount()));
|
|
|
+ v.setExpenditureAmount(v.getTrailerFee()==null?BigDecimal.ZERO:v.getTrailerFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getTrailerFeeCurrency(),BigDecimal.ONE).toString())).add
|
|
|
+ (v.getCustomsFee()==null?BigDecimal.ZERO:v.getCustomsFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCustomsFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getAgencyFee()==null?BigDecimal.ZERO:v.getAgencyFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getAgencyFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getPortMixedFee()==null?BigDecimal.ZERO:v.getPortMixedFee().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getPortMixedFeeCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getInspectionRedPack()==null?BigDecimal.ZERO:v.getInspectionRedPack().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getInspectionRedPackCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getCommission()==null?BigDecimal.ZERO:v.getCommission().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getCommissionCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getOther()==null?BigDecimal.ZERO:v.getOther().multiply(new BigDecimal(currencyRateMap.getOrDefault(v.getOtherCurrency(),BigDecimal.ONE).toString()))).add
|
|
|
+ (v.getEhsdSumAmount()==null?BigDecimal.ZERO:v.getEhsdSumAmount()).add
|
|
|
+ (v.getOtherumAmount()==null?BigDecimal.ZERO:v.getOtherumAmount()));
|
|
|
}
|
|
|
//计算毛利 收入-支出
|
|
|
v.setGross(v.getExpenditureAmount().subtract(v.getIncomeAmount()));
|