|
@@ -13,6 +13,7 @@ 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;
|
|
|
+import com.fjhx.purchase.entity.purchase.enums.PurchaseStatusEnum;
|
|
|
import com.fjhx.purchase.entity.purchase.po.Purchase;
|
|
|
import com.fjhx.purchase.entity.purchase.po.PurchaseDetail;
|
|
|
import com.fjhx.purchase.service.purchase.PurchaseDetailService;
|
|
@@ -94,11 +95,11 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
// 获取税率明细
|
|
|
Map<Long, Map<String, BigDecimal>> detailsRateMap = getDetailsRateMap(records, defaultRateMap);
|
|
|
|
|
|
- // 赋值合同到账
|
|
|
+ //赋值合同到账金额、退税金额、采购金额
|
|
|
setContractArrivalAndRefundMoney(list);
|
|
|
|
|
|
- // 赋值采购合同金额和支付货款
|
|
|
- setPurchaseAmountAndPayForGoods(list, detailsRateMap);
|
|
|
+// // 赋值采购合同金额和支付货款
|
|
|
+// setPurchaseAmountAndPayForGoods(list, detailsRateMap);
|
|
|
|
|
|
// 计算
|
|
|
calculation(list);
|
|
@@ -185,7 +186,7 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 赋值合同到账金额
|
|
|
+ * 赋值合同到账金额、退税金额、采购金额
|
|
|
*/
|
|
|
private void setContractArrivalAndRefundMoney(List<ProfitSettlementVo> list) {
|
|
|
|
|
@@ -255,6 +256,10 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
List<TaxRefundDetails> refundDetails = taxRefundDetailsService.getSumMoneyByContractIds(contractIdList);
|
|
|
Map<Long,List<TaxRefundDetails>> refundDetailsMap = refundDetails.stream().collect(Collectors.groupingBy(TaxRefundDetails::getContractId));
|
|
|
|
|
|
+ //通过合同IDS查询出采购数据
|
|
|
+ List<Purchase> purchaseList = purchaseService.list(q -> q.in(Purchase::getDataResourceId, contractIdList).ge(Purchase::getPurchaseStatus, PurchaseStatusEnum.PASS.getKey()).lt(Purchase::getPurchaseStatus, PurchaseStatusEnum.CENCELLATION.getKey()));
|
|
|
+ Map<Long,List<Purchase>> purchaseMap = purchaseList.stream().collect(Collectors.groupingBy(Purchase::getDataResourceId));
|
|
|
+
|
|
|
for(ProfitSettlementVo p:list){
|
|
|
if(StringUtil.isNotEmpty(p.getCurrencyRateJson())){//取设置的汇率
|
|
|
List<CurrencyRate> assignCurrencyRatesList = JSON.parseArray(p.getCurrencyRateJson(), CurrencyRate.class);
|
|
@@ -289,6 +294,21 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
}).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
p.setTaxReturnMoney(taxReturnMoney);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 处理采购金额
|
|
|
+ */
|
|
|
+ List<Purchase> pList = purchaseMap.getOrDefault(p.getContractId(),null);
|
|
|
+ if(CollectionUtils.isNotEmpty(pList)){
|
|
|
+ BigDecimal purchaseAmount = pList.stream().map(purchase -> {
|
|
|
+ //获取汇率
|
|
|
+ BigDecimal rate = assignCurrencyRatesMap.getOrDefault(purchase.getCurrency(),BigDecimal.ONE);
|
|
|
+ // 获取认领金额
|
|
|
+ BigDecimal money = purchase.getAmount();
|
|
|
+ // 返回兑人民币后金额
|
|
|
+ return rate.multiply(money);
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ p.setPurchaseAmount(purchaseAmount);
|
|
|
+ }
|
|
|
}else{//取数据汇率
|
|
|
/**
|
|
|
* 处理到账金额
|
|
@@ -324,6 +344,21 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
}).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
p.setTaxReturnMoney(taxReturnMoney);
|
|
|
}
|
|
|
+ /**
|
|
|
+ * 处理采购金额
|
|
|
+ */
|
|
|
+ List<Purchase> pList = purchaseMap.getOrDefault(p.getContractId(),null);
|
|
|
+ if(CollectionUtils.isNotEmpty(pList)){
|
|
|
+ BigDecimal purchaseAmount = pList.stream().map(purchase -> {
|
|
|
+ //获取汇率
|
|
|
+ BigDecimal rate = purchase.getRate()==null?BigDecimal.ZERO:purchase.getRate();
|
|
|
+ // 获取认领金额
|
|
|
+ BigDecimal money = purchase.getAmount()==null?BigDecimal.ZERO:purchase.getAmount();
|
|
|
+ // 返回兑人民币后金额
|
|
|
+ return rate.multiply(money);
|
|
|
+ }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ p.setPurchaseAmount(purchaseAmount);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -334,57 +369,60 @@ public class SaleStatementServiceImpl implements SaleStatementService {
|
|
|
*/
|
|
|
private void setPurchaseAmountAndPayForGoods(
|
|
|
List<ProfitSettlementVo> list, Map<Long, Map<String, BigDecimal>> detailsRateMap) {
|
|
|
+//
|
|
|
+// // 合同id
|
|
|
+// List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
|
|
|
+//
|
|
|
+// List<Purchase> purchaseList = purchaseService.list(q -> q.in(Purchase::getDataResourceId, contractIdList));
|
|
|
+//
|
|
|
+// Map<Long,List<Purchase>> purchaseMap = purchaseList.stream().collect(Collectors.groupingBy(Purchase::getDataResourceId));
|
|
|
+// if (purchaseList.size() == 0) {
|
|
|
+// purchaseList.forEach(item -> item.setAmount(BigDecimal.ZERO));
|
|
|
+// return;
|
|
|
+// }
|
|
|
|
|
|
- // 合同id
|
|
|
- List<Long> contractIdList = list.stream().map(ProfitSettlementVo::getContractId).collect(Collectors.toList());
|
|
|
-
|
|
|
- List<PurchaseDetail> purchaseDetailList = purchaseDetailService.list(q -> q.in(PurchaseDetail::getDataResourceId, contractIdList));
|
|
|
- if (purchaseDetailList.size() == 0) {
|
|
|
- list.forEach(item -> item.setPurchaseAmount(BigDecimal.ZERO));
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- List<Long> purchaseIdList = purchaseDetailList.stream().map(PurchaseDetail::getPurchaseId).collect(Collectors.toList());
|
|
|
- List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
|
|
|
-
|
|
|
- // 采购id 币种 map
|
|
|
- Map<Long, String> purchaseIdCurrencyMap = purchaseList.stream()
|
|
|
- .collect(Collectors.toMap(BaseIdPo::getId, Purchase::getCurrency));
|
|
|
-
|
|
|
- // 合同id 申购单列表 map
|
|
|
- Map<Long, List<PurchaseDetail>> contractIdPurchaseDetailListMap = purchaseDetailList.stream()
|
|
|
- .collect(Collectors.groupingBy(PurchaseDetail::getDataResourceId));
|
|
|
-
|
|
|
- for (ProfitSettlementVo profitSettlementVo : list) {
|
|
|
-
|
|
|
- // 合同id
|
|
|
- Long contractId = profitSettlementVo.getContractId();
|
|
|
-
|
|
|
- // 申购单
|
|
|
- List<PurchaseDetail> itemPurchaseDetailList = contractIdPurchaseDetailListMap.getOrDefault(contractId, new ArrayList<>());
|
|
|
-
|
|
|
- // 汇率币种map
|
|
|
- Map<String, BigDecimal> map = detailsRateMap.getOrDefault(contractId, new HashMap<>());
|
|
|
-
|
|
|
- BigDecimal purchaseAmount = itemPurchaseDetailList.stream().map(purchaseDetail -> {
|
|
|
-
|
|
|
- // 根据申购单id获取币种
|
|
|
- String currency = purchaseIdCurrencyMap.get(purchaseDetail.getPurchaseId());
|
|
|
-
|
|
|
- // 根据币种获取汇率
|
|
|
- BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
|
|
|
-
|
|
|
- // 获取申购金额
|
|
|
- BigDecimal money = purchaseDetail.getAmount();
|
|
|
-
|
|
|
- // 返回兑人民币后金额
|
|
|
- return rate.multiply(money);
|
|
|
+// List<Long> purchaseIdList = purchaseDetailList.stream().map(PurchaseDetail::getPurchaseId).collect(Collectors.toList());
|
|
|
+// List<Purchase> purchaseList = purchaseService.listByIds(purchaseIdList);
|
|
|
|
|
|
- }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+// // 采购id 币种 map
|
|
|
+// Map<Long, String> purchaseIdCurrencyMap = purchaseList.stream()
|
|
|
+// .collect(Collectors.toMap(BaseIdPo::getId, Purchase::getCurrency));
|
|
|
|
|
|
- profitSettlementVo.setPurchaseAmount(purchaseAmount);
|
|
|
+// // 合同id 申购单列表 map
|
|
|
+// Map<Long, List<PurchaseDetail>> contractIdPurchaseDetailListMap = purchaseDetailList.stream()
|
|
|
+// .collect(Collectors.groupingBy(PurchaseDetail::getDataResourceId));
|
|
|
|
|
|
- }
|
|
|
+// for (ProfitSettlementVo profitSettlementVo : list) {
|
|
|
+//
|
|
|
+// // 合同id
|
|
|
+// Long contractId = profitSettlementVo.getContractId();
|
|
|
+// List<Purchase> pList = purchaseMap.getOrDefault(contractId,null);
|
|
|
+//
|
|
|
+//// // 申购单
|
|
|
+//// List<PurchaseDetail> itemPurchaseDetailList = contractIdPurchaseDetailListMap.getOrDefault(contractId, new ArrayList<>());
|
|
|
+//
|
|
|
+// // 汇率币种map
|
|
|
+// Map<String, BigDecimal> map = detailsRateMap.getOrDefault(contractId, new HashMap<>());
|
|
|
+//
|
|
|
+// BigDecimal purchaseAmount = itemPurchaseDetailList.stream().map(purchaseDetail -> {
|
|
|
+//
|
|
|
+// // 根据申购单id获取币种
|
|
|
+// String currency = purchaseIdCurrencyMap.get(purchaseDetail.getPurchaseId());
|
|
|
+//
|
|
|
+// // 根据币种获取汇率
|
|
|
+// BigDecimal rate = map.getOrDefault(currency, BigDecimal.ONE);
|
|
|
+//
|
|
|
+// // 获取申购金额
|
|
|
+// BigDecimal money = purchaseDetail.getAmount();
|
|
|
+//
|
|
|
+// // 返回兑人民币后金额
|
|
|
+// return rate.multiply(money);
|
|
|
+//
|
|
|
+// }).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+//
|
|
|
+// profitSettlementVo.setPurchaseAmount(purchaseAmount);
|
|
|
+//
|
|
|
+// }
|
|
|
|
|
|
}
|
|
|
|