|
|
@@ -55,7 +55,6 @@ import java.math.RoundingMode;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Date;
|
|
|
import java.util.List;
|
|
|
-import java.util.Objects;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
/**
|
|
|
@@ -276,6 +275,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
|
|
|
//明细状态修改 已开发票
|
|
|
List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
|
|
|
item.setBillDate(finInvoices.getBillDate());
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
@@ -325,6 +325,39 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
finAccBills.setUninvoicedAmountUsd(finAccBills.getUninvoicedAmountUsd().add(item.getCurrentAmount()));
|
|
|
}
|
|
|
finAccBillsList.add(finAccBills);
|
|
|
+ List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .in(FeeCenter::getAccBillId, finAccBills.getId())
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0));
|
|
|
+ BigDecimal currentStlAmount = item.getCurrentAmount();
|
|
|
+ for (FeeCenter feeCenter : feeCenters) {
|
|
|
+ feeCenter.setInvoiceBillId(detail.getId() + "");
|
|
|
+ feeCenter.setInvoiceBillNo(detail.getBillNo());
|
|
|
+ feeCenter.setInvoiceNo(detail.getInvoiceNo());
|
|
|
+ feeCenter.setInvoiceDate(feeCenter.getBillDate());
|
|
|
+ feeCenter.setInvoiceStatus(9);
|
|
|
+ feeCenter.setInvoiceCurCode(detail.getCurCode());
|
|
|
+ feeCenter.setInvoiceExrate(detail.getExrate());
|
|
|
+ if ("CNY".equals(detail.getCurCode())) {
|
|
|
+ feeCenter.setInvoiceAmount(detail.getAmountCny());
|
|
|
+ } else {
|
|
|
+ feeCenter.setInvoiceAmount(detail.getAmountUsd());
|
|
|
+ }
|
|
|
+ feeCenter.setInvoiceAmountLoc(detail.getAmountLoc());
|
|
|
+ feeCenter.setInvoiceById(detail.getCreateUser());
|
|
|
+ feeCenter.setInvoiceByName(detail.getCreateUserName());
|
|
|
+ if (feeCenter.getAmount().subtract(feeCenter.getUninvoicedAmount()).compareTo(currentStlAmount) > 0) {
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().add(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (feeCenter.getAmount().subtract(feeCenter.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getAmount());
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getAmount());
|
|
|
+ currentStlAmount = currentStlAmount.subtract(feeCenter.getAmount());
|
|
|
+ }
|
|
|
+ feeCenterList.add(feeCenter);
|
|
|
+ }
|
|
|
}
|
|
|
finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
|
|
|
List<Long> ids = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getApplySrcId).collect(Collectors.toList());
|
|
|
@@ -350,16 +383,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
finInvoicesItemsService.saveOrUpdateBatch(finInvoicesItemsList);
|
|
|
}
|
|
|
}
|
|
|
- //通过明细里账单id查询具体账单数据
|
|
|
- List<Long> accIds = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId)
|
|
|
- .filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
- //通过账单id查询具体费用中心数据
|
|
|
- List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
- .in(FeeCenter::getAccBillId, accIds)
|
|
|
- .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(FeeCenter::getIsDeleted, 0));
|
|
|
- List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 1);
|
|
|
- feeCenterService.saveOrUpdateBatch(feeCenterListNew);
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
}
|
|
|
BigDecimal invoiceAmount = new BigDecimal("0.00");
|
|
|
@@ -418,72 +442,6 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
return item;
|
|
|
}
|
|
|
|
|
|
- private List<FeeCenter> reconciliationFeeCenter(FinInvoices detail, List<FeeCenter> feeCenterList, int count) {
|
|
|
- BigDecimal currentStlAmount = detail.getAmountLoc();
|
|
|
- for (FeeCenter item : feeCenterList) {
|
|
|
- item.setInvoiceAmountLoc(item.getInvoiceAmountLoc() == null ? new BigDecimal("0.00") : item.getInvoiceAmountLoc());
|
|
|
- if (count == 1) {
|
|
|
- item.setInvoiceBillId(detail.getId() + "");
|
|
|
- item.setInvoiceBillNo(detail.getBillNo());
|
|
|
- item.setInvoiceNo(detail.getInvoiceNo());
|
|
|
- item.setInvoiceDate(item.getBillDate());
|
|
|
- item.setInvoiceStatus(9);
|
|
|
- item.setInvoiceCurCode(detail.getCurCode());
|
|
|
- item.setInvoiceExrate(detail.getExrate());
|
|
|
- if ("CNY".equals(detail.getCurCode())) {
|
|
|
- item.setInvoiceAmount(detail.getAmountCny());
|
|
|
- } else {
|
|
|
- item.setInvoiceAmount(detail.getAmountUsd());
|
|
|
- }
|
|
|
- item.setInvoiceAmountLoc(detail.getAmountLoc());
|
|
|
- item.setInvoiceById(detail.getCreateUser());
|
|
|
- item.setInvoiceByName(detail.getCreateUserName());
|
|
|
- if (item.getAmount().subtract(item.getUninvoicedAmount()).compareTo(currentStlAmount) > 0) {
|
|
|
- item.setUninvoicedAmount(item.getUninvoicedAmount().add(currentStlAmount));
|
|
|
- currentStlAmount = new BigDecimal("0.00");
|
|
|
- } else if (item.getAmount().subtract(item.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
|
|
|
- item.setUninvoicedAmount(item.getAmount());
|
|
|
- currentStlAmount = new BigDecimal("0.00");
|
|
|
- } else {
|
|
|
- item.setUninvoicedAmount(item.getAmount());
|
|
|
- currentStlAmount = currentStlAmount.subtract(item.getAmount());
|
|
|
- }
|
|
|
- } else if (count == 2) {
|
|
|
- item.setInvoiceBillId(detail.getId() + "");
|
|
|
- item.setInvoiceBillNo(detail.getBillNo());
|
|
|
- item.setInvoiceNo(detail.getInvoiceNo());
|
|
|
- item.setInvoiceDate(item.getBillDate());
|
|
|
- item.setInvoiceStatus(2);
|
|
|
- item.setInvoiceCurCode(detail.getCurCode());
|
|
|
- item.setInvoiceExrate(detail.getExrate());
|
|
|
- if ("CNY".equals(detail.getCurCode())) {
|
|
|
- item.setInvoiceAmount(detail.getAmountCny());
|
|
|
- } else {
|
|
|
- item.setInvoiceAmount(detail.getAmountUsd());
|
|
|
- }
|
|
|
- item.setInvoiceAmountLoc(detail.getAmountLoc());
|
|
|
- item.setUninvoicedAmount(item.getUninvoicedAmount().add(new BigDecimal("0.00").subtract(detail.getAmountLoc())));
|
|
|
- item.setInvoiceById(detail.getCreateUser());
|
|
|
- item.setInvoiceByName(detail.getCreateUserName());
|
|
|
- if (item.getAmount().subtract(item.getUninvoicedAmount()).compareTo(currentStlAmount) > 0) {
|
|
|
- item.setUninvoicedAmount(item.getUninvoicedAmount().subtract(currentStlAmount));
|
|
|
- currentStlAmount = new BigDecimal("0.00");
|
|
|
- } else if (item.getAmount().subtract(item.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
|
|
|
- item.setUninvoicedAmount(item.getUninvoicedAmount().subtract(currentStlAmount));
|
|
|
- currentStlAmount = new BigDecimal("0.00");
|
|
|
- } else {
|
|
|
- item.setUninvoicedAmount(item.getUninvoicedAmount().subtract(currentStlAmount));
|
|
|
- currentStlAmount = currentStlAmount.subtract(item.getAmount());
|
|
|
- }
|
|
|
- } else if (count == 3) {
|
|
|
- item.setAppliedInvoiceAmount(item.getAppliedInvoiceAmount().add(detail.getAmountLoc()));
|
|
|
- } else if (count == 4) {
|
|
|
- item.setAppliedInvoiceAmount(item.getAppliedInvoiceAmount().subtract(detail.getAmountLoc()));
|
|
|
- }
|
|
|
- }
|
|
|
- return feeCenterList;
|
|
|
- }
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
@GlobalTransactional(rollbackFor = Exception.class, timeoutMills = 12000000)
|
|
|
@@ -497,6 +455,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
}
|
|
|
if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
|
|
|
List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
|
|
|
item.setBillDate(null);
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
@@ -538,6 +497,40 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
finAccBills.setUninvoicedAmountUsd(finAccBills.getUninvoicedAmountUsd().subtract(item.getCurrentAmount()));
|
|
|
}
|
|
|
finAccBillsList.add(finAccBills);
|
|
|
+ List<FeeCenter> feeCenters = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .in(FeeCenter::getAccBillId, finAccBills.getId())
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0));
|
|
|
+ BigDecimal currentStlAmount = detail.getAmountLoc();
|
|
|
+ for (FeeCenter feeCenter : feeCenters) {
|
|
|
+ feeCenter.setInvoiceBillId(detail.getId() + "");
|
|
|
+ feeCenter.setInvoiceBillNo(detail.getBillNo());
|
|
|
+ feeCenter.setInvoiceNo(detail.getInvoiceNo());
|
|
|
+ feeCenter.setInvoiceDate(feeCenter.getBillDate());
|
|
|
+ feeCenter.setInvoiceStatus(2);
|
|
|
+ feeCenter.setInvoiceCurCode(detail.getCurCode());
|
|
|
+ feeCenter.setInvoiceExrate(detail.getExrate());
|
|
|
+ if ("CNY".equals(detail.getCurCode())) {
|
|
|
+ feeCenter.setInvoiceAmount(detail.getAmountCny());
|
|
|
+ } else {
|
|
|
+ feeCenter.setInvoiceAmount(detail.getAmountUsd());
|
|
|
+ }
|
|
|
+ feeCenter.setInvoiceAmountLoc(detail.getAmountLoc());
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().add(new BigDecimal("0.00").subtract(detail.getAmountLoc())));
|
|
|
+ feeCenter.setInvoiceById(detail.getCreateUser());
|
|
|
+ feeCenter.setInvoiceByName(detail.getCreateUserName());
|
|
|
+ if (feeCenter.getAmount().subtract(feeCenter.getUninvoicedAmount()).compareTo(currentStlAmount) > 0) {
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().subtract(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (feeCenter.getAmount().subtract(feeCenter.getStlTtlAmount()).compareTo(currentStlAmount) == 0) {
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().subtract(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ feeCenter.setUninvoicedAmount(feeCenter.getUninvoicedAmount().subtract(currentStlAmount));
|
|
|
+ currentStlAmount = currentStlAmount.subtract(item.getAmount());
|
|
|
+ }
|
|
|
+ feeCenterList.add(feeCenter);
|
|
|
+ }
|
|
|
}
|
|
|
finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
|
|
|
List<Long> ids = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getApplySrcId).collect(Collectors.toList());
|
|
|
@@ -556,14 +549,7 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
finInvoicesItemsService.saveOrUpdateBatch(finInvoicesItemsList);
|
|
|
}
|
|
|
}
|
|
|
- List<Long> accIds = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId)
|
|
|
- .filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
- List<FeeCenter> feeCenterList = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
- .in(FeeCenter::getAccBillId, accIds)
|
|
|
- .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
- .eq(FeeCenter::getIsDeleted, 0));
|
|
|
- List<FeeCenter> feeCenterListNew = reconciliationFeeCenter(detail, feeCenterList, 2);
|
|
|
- feeCenterService.saveOrUpdateBatch(feeCenterListNew);
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
}
|
|
|
detail.setStatus(0);
|
|
|
@@ -814,7 +800,11 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
item.setUpdateUser(AuthUtil.getUserId());
|
|
|
item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
if ("USD".equals(item.getCurCode())) {
|
|
|
- amount = amount.add(item.getCurrentAmount().multiply(finInvoices.getExrate()));
|
|
|
+ if (0 == finInvoices.getIsExchangeToCny()) {
|
|
|
+ amount = amount.add(item.getCurrentAmount().multiply(item.getExrate()));
|
|
|
+ } else {
|
|
|
+ amount = amount.add(item.getCurrentAmount().multiply(finInvoices.getExrate()));
|
|
|
+ }
|
|
|
} else {
|
|
|
amount = amount.add(item.getCurrentAmount());
|
|
|
}
|