|
|
@@ -215,7 +215,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.eq(FinStlBills::getIsDeleted, 0)
|
|
|
.eq(FinStlBills::getBillNo, finStlBills.getBillNo())
|
|
|
);
|
|
|
- if (!finStlBillsList.isEmpty()){
|
|
|
+ if (!finStlBillsList.isEmpty()) {
|
|
|
throw new RuntimeException("订单编号重复,请重新保存");
|
|
|
}
|
|
|
finStlBills.setCreateTime(new Date());
|
|
|
@@ -231,9 +231,10 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.eq(FinStlBills::getBranchId, finStlBills.getBranchId())
|
|
|
.eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .ne(FinStlBills::getId, finStlBills.getId())
|
|
|
.eq(FinStlBills::getBillNo, finStlBills.getBillNo())
|
|
|
);
|
|
|
- if (!finStlBillsList.isEmpty()){
|
|
|
+ if (!finStlBillsList.isEmpty()) {
|
|
|
throw new RuntimeException("订单编号重复,请重新创建单据");
|
|
|
}
|
|
|
finStlBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
@@ -1301,7 +1302,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
}
|
|
|
boolean status = Boolean.FALSE;
|
|
|
-
|
|
|
//计算字段null值处理
|
|
|
item.setStlTtlAmount(ObjectUtils.isNotNull(item.getStlTtlAmount()) ? item.getStlTtlAmount() : new BigDecimal("0.00"));
|
|
|
item.setUnsettledAmount(ObjectUtils.isNotNull(item.getUnsettledAmount()) ? item.getUnsettledAmount() : new BigDecimal("0.00"));
|
|
|
@@ -2238,26 +2238,28 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
throw new RuntimeException("缺少必要参数");
|
|
|
}
|
|
|
List<FinAccBills> finAccBillsListAll = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
- .select(FinAccBills::getId,FinAccBills::getBranchId,FinAccBills::getBranchName,
|
|
|
- FinAccBills::getApprovedDate,FinAccBills::getVoucherDate,FinAccBills::getInvoiceDate,FinAccBills::getStlDate,
|
|
|
- FinAccBills::getEta,FinAccBills::getEtd,FinAccBills::getAccountDate,FinAccBills::getBillDate,
|
|
|
- FinAccBills::getReconciliationAmount, FinAccBills::getAccountDc,
|
|
|
- FinAccBills::getAmountDr, FinAccBills::getAmountCr, FinAccBills::getReconciliationAmountUsd,
|
|
|
- FinAccBills::getAmountDrUsd, FinAccBills::getAmountCrUsd,FinAccBills::getAppliedAmount,
|
|
|
- FinAccBills::getAppliedAmountStl, FinAccBills::getAmountDrLoc, FinAccBills::getStlAmountDrLoc,
|
|
|
- FinAccBills::getAmountCrLoc, FinAccBills::getStlAmountCrLoc, FinAccBills::getAppliedAmountUsd,
|
|
|
- FinAccBills::getAppliedAmountStlUsd)
|
|
|
+ .select(FinAccBills::getId, FinAccBills::getBranchId, FinAccBills::getBranchName,
|
|
|
+ FinAccBills::getApprovedDate, FinAccBills::getVoucherDate, FinAccBills::getInvoiceDate, FinAccBills::getStlDate,
|
|
|
+ FinAccBills::getEta, FinAccBills::getEtd, FinAccBills::getAccountDate, FinAccBills::getBillDate,
|
|
|
+ FinAccBills::getReconciliationAmount, FinAccBills::getAccountDc,
|
|
|
+ FinAccBills::getAmountDr, FinAccBills::getAmountCr, FinAccBills::getReconciliationAmountUsd,
|
|
|
+ FinAccBills::getAmountDrUsd, FinAccBills::getAmountCrUsd, FinAccBills::getAppliedAmount,
|
|
|
+ FinAccBills::getAppliedAmountStl, FinAccBills::getAmountDrLoc, FinAccBills::getStlAmountDrLoc,
|
|
|
+ FinAccBills::getAmountCrLoc, FinAccBills::getStlAmountCrLoc, FinAccBills::getAppliedAmountUsd,
|
|
|
+ FinAccBills::getStlAmountDr, FinAccBills::getStlAmountDrUsd, FinAccBills::getStlAmountCr,
|
|
|
+ FinAccBills::getStlAmountCrUsd, FinAccBills::getAppliedAmountStlUsd)
|
|
|
.eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(FinAccBills::getIsDeleted, 0)
|
|
|
.in(FinAccBills::getId, finStlBills.getFinAccBillsVOList().stream().map(FinAccBillsVO::getId).collect(Collectors.toList())));
|
|
|
if (finAccBillsListAll.isEmpty()) {
|
|
|
throw new RuntimeException("未查到账单数据");
|
|
|
}
|
|
|
+ FinStlBills stlBills = baseMapper.selectById(finStlBills.getId());
|
|
|
+ String exrateType = currencyUtils.standardCurrency(stlBills.getBranchId());
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsList = new ArrayList<>();
|
|
|
if ("1".equals(finStlBills.getType())) {
|
|
|
- FinStlBills reconciliation = baseMapper.selectById(finStlBills.getId());
|
|
|
- List<FinStlBillsItems> finStlBillsItemsList = new ArrayList<>();
|
|
|
for (FinAccBillsVO item : finStlBills.getFinAccBillsVOList()) {
|
|
|
- FinStlBillsItems stlBillsItems = this.assignmentProcess(item, reconciliation);
|
|
|
+ FinStlBillsItems stlBillsItems = this.assignmentProcess(item, stlBills);
|
|
|
stlBillsItems.setPType("DZ");
|
|
|
stlBillsItems.setCurrentStlAmountNet(item.getReconciliationCurrentAmount());
|
|
|
stlBillsItems.setCurrentStlAmount(item.getReconciliationCurrentAmount());
|
|
|
@@ -2268,12 +2270,12 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
if (!finStlBillsItemsList.isEmpty()) {
|
|
|
finStlBillsItemsService.saveBatch(finStlBillsItemsList);
|
|
|
List<FeeCenter> feeCenterListAll = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
- .select(FeeCenter::getBranchId,FeeCenter::getBranchName,FeeCenter::getStlPid,
|
|
|
- FeeCenter::getQuantityCntrDescr,FeeCenter::getApproveTime, FeeCenter::getApplyTime,
|
|
|
- FeeCenter::getSignforDate,FeeCenter::getInvoiceDate, FeeCenter::getVoucherDate,
|
|
|
- FeeCenter::getStlDate,FeeCenter::getCheckDate, FeeCenter::getAccDate,
|
|
|
- FeeCenter::getId,FeeCenter::getAccBillId, FeeCenter::getVersion,
|
|
|
- FeeCenter::getAmount, FeeCenter::getReconciliationAmount)
|
|
|
+ .select(FeeCenter::getBranchId, FeeCenter::getBranchName, FeeCenter::getStlPid,
|
|
|
+ FeeCenter::getQuantityCntrDescr, FeeCenter::getApproveTime, FeeCenter::getApplyTime,
|
|
|
+ FeeCenter::getSignforDate, FeeCenter::getInvoiceDate, FeeCenter::getVoucherDate,
|
|
|
+ FeeCenter::getStlDate, FeeCenter::getCheckDate, FeeCenter::getAccDate,
|
|
|
+ FeeCenter::getId, FeeCenter::getAccBillId, FeeCenter::getVersion,
|
|
|
+ FeeCenter::getAmount, FeeCenter::getReconciliationAmount)
|
|
|
.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(FeeCenter::getAccStatus, 1)
|
|
|
.in(FeeCenter::getAccBillId, finAccBillsListAll.stream().map(FinAccBills::getId).collect(Collectors.toList()))
|
|
|
@@ -2282,7 +2284,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
if (feeCenterListAll.isEmpty()) {
|
|
|
throw new RuntimeException("未查到来源单据费用明细数据");
|
|
|
}
|
|
|
- String exrateType = currencyUtils.standardCurrency(reconciliation.getBranchId());
|
|
|
List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
//对账明细状态修改 已对账
|
|
|
@@ -2343,13 +2344,13 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
.collect(Collectors.toList());
|
|
|
BigDecimal currentStlAmount = item.getCurrentStlAmount();
|
|
|
for (FeeCenter feeCenter : feeCenters) {
|
|
|
- feeCenter.setCheckBillId(reconciliation.getId());
|
|
|
- feeCenter.setCheckBillNo(reconciliation.getBillNo());
|
|
|
- feeCenter.setCheckDate(reconciliation.getBillDate());
|
|
|
+ feeCenter.setCheckBillId(stlBills.getId());
|
|
|
+ feeCenter.setCheckBillNo(stlBills.getBillNo());
|
|
|
+ feeCenter.setCheckDate(stlBills.getBillDate());
|
|
|
feeCenter.setCheckAmount(item.getAmount());
|
|
|
feeCenter.setCheckStatus(1);
|
|
|
- feeCenter.setCheckById(reconciliation.getCreateUser());
|
|
|
- feeCenter.setCheckByName(reconciliation.getCreateUserName());
|
|
|
+ feeCenter.setCheckById(stlBills.getCreateUser());
|
|
|
+ feeCenter.setCheckByName(stlBills.getCreateUserName());
|
|
|
int version = StringUtil.isBlank(feeCenter.getVersion()) ? 1 : Integer.parseInt(feeCenter.getVersion());
|
|
|
feeCenter.setVersion(String.valueOf(version + 1));
|
|
|
if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
@@ -2376,14 +2377,10 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
}
|
|
|
feeCenterService.updateBatchById(feeCenterList);
|
|
|
finAccBillsService.updateBatchById(finAccBillsList);
|
|
|
- this.countFeeItems(reconciliation, finStlBillsItemsList, exrateType);
|
|
|
- baseMapper.updateById(reconciliation);
|
|
|
}
|
|
|
} else if ("2".equals(finStlBills.getType())) {
|
|
|
- FinStlBills stlBillsSQ = baseMapper.selectById(finStlBills.getId());
|
|
|
- List<FinStlBillsItems> finStlBillsItemsList = new ArrayList<>();
|
|
|
for (FinAccBillsVO item : finStlBills.getFinAccBillsVOList()) {
|
|
|
- FinStlBillsItems stlBillsItems = this.assignmentProcess(item, stlBillsSQ);
|
|
|
+ FinStlBillsItems stlBillsItems = this.assignmentProcess(item, stlBills);
|
|
|
stlBillsItems.setPType("FFSQ");
|
|
|
stlBillsItems.setCurrentStlAmountNet(item.getAppliedCurrentStlAmount());
|
|
|
stlBillsItems.setCurrentStlAmount(item.getAppliedCurrentStlAmount());
|
|
|
@@ -2394,12 +2391,12 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
if (!finStlBillsItemsList.isEmpty()) {
|
|
|
finStlBillsItemsService.saveBatch(finStlBillsItemsList);
|
|
|
List<FeeCenter> feeCenterListAll = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
- .select(FeeCenter::getBranchId,FeeCenter::getBranchName,FeeCenter::getStlPid,
|
|
|
- FeeCenter::getQuantityCntrDescr,FeeCenter::getApproveTime, FeeCenter::getApplyTime,
|
|
|
- FeeCenter::getSignforDate,FeeCenter::getInvoiceDate, FeeCenter::getVoucherDate,
|
|
|
- FeeCenter::getStlDate,FeeCenter::getCheckDate, FeeCenter::getAccDate,
|
|
|
- FeeCenter::getId,FeeCenter::getAccBillId, FeeCenter::getVersion, FeeCenter::getAmount,
|
|
|
- FeeCenter::getUnsettledAmount, FeeCenter::getStlTtlAmount, FeeCenter::getAppliedAmount)
|
|
|
+ .select(FeeCenter::getBranchId, FeeCenter::getBranchName, FeeCenter::getStlPid,
|
|
|
+ FeeCenter::getQuantityCntrDescr, FeeCenter::getApproveTime, FeeCenter::getApplyTime,
|
|
|
+ FeeCenter::getSignforDate, FeeCenter::getInvoiceDate, FeeCenter::getVoucherDate,
|
|
|
+ FeeCenter::getStlDate, FeeCenter::getCheckDate, FeeCenter::getAccDate,
|
|
|
+ FeeCenter::getId, FeeCenter::getAccBillId, FeeCenter::getVersion, FeeCenter::getAmount,
|
|
|
+ FeeCenter::getUnsettledAmount, FeeCenter::getStlTtlAmount, FeeCenter::getAppliedAmount)
|
|
|
.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
.eq(FeeCenter::getAccStatus, 1)
|
|
|
.in(FeeCenter::getAccBillId, finAccBillsListAll.stream().map(FinAccBills::getId).collect(Collectors.toList()))
|
|
|
@@ -2409,7 +2406,6 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
if (feeCenterListAll.isEmpty()) {
|
|
|
throw new RuntimeException("未查到来源单据费用明细数据");
|
|
|
}
|
|
|
- String exrateType = currencyUtils.standardCurrency(stlBillsSQ.getBranchId());
|
|
|
List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
for (FinStlBillsItems item : finStlBillsItemsList) {
|
|
|
@@ -2482,14 +2478,163 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
}
|
|
|
feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
- this.countFeeItems(stlBillsSQ, finStlBillsItemsList, exrateType);
|
|
|
- baseMapper.updateById(stlBillsSQ);
|
|
|
}
|
|
|
} else if ("3".equals(finStlBills.getType())) {
|
|
|
- //todo 结算中心待开发
|
|
|
+ for (FinAccBillsVO item : finStlBills.getFinAccBillsVOList()) {
|
|
|
+ FinStlBillsItems stlBillsItems = this.assignmentProcess(item, stlBills);
|
|
|
+ stlBillsItems.setPType("STL");
|
|
|
+ if ("D".equals(item.getAccountDc())) {
|
|
|
+ stlBillsItems.setCurrentStlAmountNet(item.getAppliedInvoiceCurrentStlAmount());
|
|
|
+ stlBillsItems.setCurrentStlAmount(item.getAppliedInvoiceCurrentStlAmount());
|
|
|
+ stlBillsItems.setCurrentStlAmountLoc(item.getAppliedInvoiceCurrentStlAmount().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ } else {
|
|
|
+ stlBillsItems.setCurrentStlAmountNet(item.getAppliedCurrentStlAmount());
|
|
|
+ stlBillsItems.setCurrentStlAmount(item.getAppliedCurrentStlAmount());
|
|
|
+ stlBillsItems.setCurrentStlAmountLoc(item.getAppliedCurrentStlAmount().multiply(item.getExrate()).setScale(2, RoundingMode.HALF_UP));
|
|
|
+ }
|
|
|
+ stlBillsItems.setItemType("STL");
|
|
|
+ stlBillsItems.setStlTtlAmount(stlBillsItems.getStlTtlAmount().add(stlBillsItems.getCurrentStlAmount().add(stlBillsItems.getCurrentStlDiscount())));
|
|
|
+ stlBillsItems.setUnsettledAmount(stlBillsItems.getAmount().subtract(stlBillsItems.getStlTtlAmount()));
|
|
|
+ finStlBillsItemsList.add(stlBillsItems);
|
|
|
+ }
|
|
|
+ if (!finStlBillsItemsList.isEmpty()) {
|
|
|
+ finStlBillsItemsService.saveBatch(finStlBillsItemsList);
|
|
|
+ List<FeeCenter> feeCenterListAll = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .select(FeeCenter::getBranchId, FeeCenter::getBranchName, FeeCenter::getStlPid,
|
|
|
+ FeeCenter::getQuantityCntrDescr, FeeCenter::getApproveTime, FeeCenter::getApplyTime,
|
|
|
+ FeeCenter::getSignforDate, FeeCenter::getInvoiceDate, FeeCenter::getVoucherDate,
|
|
|
+ FeeCenter::getStlDate, FeeCenter::getCheckDate, FeeCenter::getAccDate,
|
|
|
+ FeeCenter::getId, FeeCenter::getAccBillId, FeeCenter::getVersion, FeeCenter::getAmount,
|
|
|
+ FeeCenter::getUnsettledAmount, FeeCenter::getStlTtlAmount, FeeCenter::getAppliedAmount)
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getAccStatus, 1)
|
|
|
+ .in(FeeCenter::getAccBillId, finAccBillsListAll.stream().map(FinAccBills::getId).collect(Collectors.toList()))
|
|
|
+ .apply("IF( amount < 0, amount < stl_ttl_amount, amount > stl_ttl_amount )")
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0));
|
|
|
+ if (feeCenterListAll.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到来源单据费用明细数据");
|
|
|
+ }
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBillsItemsList) {
|
|
|
+ FinAccBills finAccBills = finAccBillsListAll.stream().filter(e -> e.getId().equals(item.getAccBillId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ //计算字段null值处理
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = item.getCurrentStlAmount().multiply(item.getCurrentStlExrate());
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getStlAmountDr().abs()) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getStlAmountDrUsd().abs()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (finAccBills.getStlAmountDr().abs().compareTo(finAccBills.getAmountDr().abs()) > 0 ||
|
|
|
+ finAccBills.getStlAmountDrUsd().abs().compareTo(finAccBills.getAmountDrUsd().abs()) > 0
|
|
|
+ ) {
|
|
|
+ throw new RuntimeException("结算金额大于账单金额,操作失败");
|
|
|
+ }
|
|
|
+ } else if ("C".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = item.getCurrentStlAmount().multiply(item.getCurrentStlExrate());
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getStlAmountCr().abs()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getStlAmountCrUsd().abs()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (finAccBills.getStlAmountCr().abs().compareTo(finAccBills.getAmountCr().abs()) > 0 ||
|
|
|
+ finAccBills.getStlAmountCrUsd().abs().compareTo(finAccBills.getAmountCrUsd().abs()) > 0
|
|
|
+ ) {
|
|
|
+ throw new RuntimeException("结算金额大于账单金额,操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(stlBills.getId());
|
|
|
+ finAccBills.setStlBillNo(stlBills.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ List<FeeCenter> feeCenters = feeCenterListAll.stream().filter(e -> e.getAccBillId().equals(finAccBills.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ BigDecimal currentStlAmount = item.getCurrentStlAmount();
|
|
|
+ BigDecimal stlTtlAmount = feeCenters.stream().map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (item.getCurrentStlAmount().compareTo(new BigDecimal("0.00")) == 0 ||
|
|
|
+ item.getCurrentStlAmount().abs().compareTo(item.getAmount().abs().subtract(stlTtlAmount).abs()) > 0) {
|
|
|
+ throw new RuntimeException("本次结算金额不能为零或大于未结算金额");
|
|
|
+ }
|
|
|
+ for (FeeCenter e : feeCenters) {
|
|
|
+ int version = StringUtil.isBlank(e.getVersion()) ? 1 : Integer.parseInt(e.getVersion());
|
|
|
+ e.setVersion(String.valueOf(version + 1));
|
|
|
+ e.setTaxInvoiceNumber(item.getTaxInvoiceNumber());
|
|
|
+ e.setTaxInvoiceDate(item.getTaxInvoiceDate());
|
|
|
+ e.setDeductionTime(item.getDeductionTime());
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ //计算字段null值处理
|
|
|
+ e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(ObjectUtils.isNotNull(e.getUnsettledAmount()) ? e.getUnsettledAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlTtlAmount(ObjectUtils.isNotNull(e.getStlTtlAmount()) ? e.getStlTtlAmount() : new BigDecimal("0.00"));
|
|
|
+
|
|
|
+ e.setStlBillId(stlBills.getId());
|
|
|
+ e.setStlBillNo(stlBills.getBillNo());
|
|
|
+ e.setStlDate(stlBills.getBillDate());
|
|
|
+ e.setStlOrgAmount(item.getCurrentStlAmount().multiply(item.getExrate()));
|
|
|
+ e.setStlCurCode(item.getCurrentStlCurCode());
|
|
|
+ e.setStlExrate(item.getExrate());
|
|
|
+ e.setStlExrateLoc(item.getCurrentStlExrate());
|
|
|
+ e.setStlAmount(item.getCurrentStlAmount());
|
|
|
+ e.setStlAmountLoc(item.getCurrentStlAmountLoc());
|
|
|
+ e.setStlStatus(1);
|
|
|
+ e.setStlById(stlBills.getCreateUser());
|
|
|
+ e.setStlByName(stlBills.getCreateUserName());
|
|
|
+ if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()).subtract(currentStlAmount));
|
|
|
+ e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
|
|
|
+ e.setUnsettledAmount(new BigDecimal("0.00"));
|
|
|
+ e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ e.setUnsettledAmount(new BigDecimal("0.00"));
|
|
|
+ currentStlAmount = currentStlAmount.subtract((e.getAmount().subtract(e.getStlTtlAmount())));
|
|
|
+ e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
|
|
|
+ }
|
|
|
+ feeCenterList.add(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ throw new RuntimeException("结算金额计算错误,操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ }
|
|
|
} else {
|
|
|
throw new RuntimeException("类型错误");
|
|
|
}
|
|
|
+ this.countFeeItems(stlBills, finStlBillsItemsList, exrateType);
|
|
|
+ baseMapper.updateById(stlBills);
|
|
|
return R.data(finStlBills);
|
|
|
}
|
|
|
|
|
|
@@ -2698,6 +2843,7 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
throw new RuntimeException("已确认,请先撤销后再删除");
|
|
|
}
|
|
|
String exrateType = currencyUtils.standardCurrency(stlBills.getBranchId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "2", stlBills.getBranchId());
|
|
|
List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
.in(FinStlBillsItems::getId, idsList)
|
|
|
.eq(FinStlBillsItems::getPid, stlBills.getId())
|
|
|
@@ -2721,6 +2867,8 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
lambdaQueryWrapper.apply("reconciliation_amount != 0");
|
|
|
} else if ("2".equals(finStlBills.getType())) {
|
|
|
lambdaQueryWrapper.apply("applied_amount != 0");
|
|
|
+ } else if ("3".equals(finStlBills.getType())) {
|
|
|
+ lambdaQueryWrapper.apply("stl_ttl_amount != 0");
|
|
|
} else {
|
|
|
lambdaQueryWrapper.apply("applied_amount != 0");
|
|
|
}
|
|
|
@@ -2857,17 +3005,126 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
}
|
|
|
}
|
|
|
} else if ("3".equals(finStlBills.getType())) {
|
|
|
- //todo 结算中心待开发
|
|
|
+ for (FinStlBillsItems item : finStlBillsItemsList) {
|
|
|
+ FinAccBills finAccBills = finAccBillsListAll.stream().filter(e -> e.getId().equals(item.getAccBillId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ //计算字段null值处理
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = currencyUtils.converter(item.getDc(), curExrateList, item.getCurrentStlAmount(), item.getCurCode(), "2");
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ finAccBills.setIsCleared(0);
|
|
|
+ } else if (finAccBills.getAmountDr().abs().compareTo(new BigDecimal("0.00")) < 0 ||
|
|
|
+ finAccBills.getAmountDrUsd().abs().compareTo(new BigDecimal("0.00")) < 0) {
|
|
|
+ throw new RuntimeException("撤销金额大于账单金额,操作失败");
|
|
|
+ } else {
|
|
|
+ if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getStlAmountDr().abs()) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getStlAmountDrUsd().abs()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if ("C".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = currencyUtils.converter(item.getDc(), curExrateList, item.getCurrentStlAmount(), item.getCurCode(), "2");
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountCr().compareTo(new BigDecimal("0.00")) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ finAccBills.setIsCleared(0);
|
|
|
+ } else if (finAccBills.getAmountCr().abs().compareTo(new BigDecimal("0.00")) < 0 ||
|
|
|
+ finAccBills.getAmountCrUsd().abs().compareTo(new BigDecimal("0.00")) < 0) {
|
|
|
+ throw new RuntimeException("撤销金额大于账单金额,操作失败");
|
|
|
+ } else {
|
|
|
+ if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getStlAmountCr()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(0L);
|
|
|
+ finAccBills.setStlBillNo("");
|
|
|
+ finAccBills.setStlDate(null);
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ List<FeeCenter> feeCenters = feeCenterListAll.stream().filter(e -> e.getAccBillId().equals(finAccBills.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ BigDecimal currentStlAmount = item.getCurrentStlAmount();
|
|
|
+ for (FeeCenter e : feeCenters) {
|
|
|
+ int version = StringUtil.isBlank(e.getVersion()) ? 1 : Integer.parseInt(e.getVersion());
|
|
|
+ e.setVersion(String.valueOf(version + 1));
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ //计算字段null值处理
|
|
|
+ e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(ObjectUtils.isNotNull(e.getUnsettledAmount()) ? e.getUnsettledAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlTtlAmount(ObjectUtils.isNotNull(e.getStlTtlAmount()) ? e.getStlTtlAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlBillId(0L);
|
|
|
+ e.setStlBillNo("");
|
|
|
+ e.setStlDate(null);
|
|
|
+ e.setStlOrgAmount(new BigDecimal("0.00"));
|
|
|
+ e.setStlCurCode("");
|
|
|
+ e.setStlExrate(new BigDecimal("0.00"));
|
|
|
+ e.setStlExrateLoc(new BigDecimal("0.00"));
|
|
|
+ e.setStlAmount(new BigDecimal("0.00"));
|
|
|
+ e.setStlAmountLoc(new BigDecimal("0.00"));
|
|
|
+ e.setStlStatus(0);
|
|
|
+ e.setStlById(0L);
|
|
|
+ e.setStlByName("");
|
|
|
+ if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
|
|
|
+ e.setStlTtlAmount(e.getStlTtlAmount().subtract(currentStlAmount));
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
|
|
|
+ e.setStlTtlAmount(new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ e.setStlTtlAmount(new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
|
|
|
+ currentStlAmount = currentStlAmount.subtract(e.getAmount());
|
|
|
+ }
|
|
|
+ feeCenterList.add(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ throw new RuntimeException("撤销金额计算错误,操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
finStlBillsItemsService.removeByIds(idsList);
|
|
|
this.revokeFeeItems(stlBills, finStlBillsItemsList, exrateType);
|
|
|
baseMapper.updateById(stlBills);
|
|
|
- } else if ("4".equals(finStlBills.getType())) {
|
|
|
- //todo 发票申请待开发
|
|
|
- } else if ("5".equals(finStlBills.getType())) {
|
|
|
- //todo 5销项发票待开发
|
|
|
} else {
|
|
|
throw new RuntimeException("类型错误");
|
|
|
}
|
|
|
@@ -3099,4 +3356,445 @@ public class FinStlBillsServiceImpl extends ServiceImpl<FinStlBillsMapper, FinSt
|
|
|
return R.data(detail);
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R generateFinStlBillsV1(String billId, Date date) {
|
|
|
+ if (ObjectUtils.isNull(billId) || ObjectUtils.isNull(date)) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ List<Long> idList = Func.toLongList(billId);
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsList = new ArrayList<>();
|
|
|
+ List<FinStlBills> finStlBillsList = baseMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBills::getStatus, "3")
|
|
|
+ .in(FinStlBills::getId, idList));
|
|
|
+ if (finStlBillsList.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到付费申请");
|
|
|
+ }
|
|
|
+ FinStlBills finStlBills = new FinStlBills();
|
|
|
+ BeanUtil.copyProperties(finStlBillsList.get(0), finStlBills);
|
|
|
+ finStlBills.setId(null);
|
|
|
+ finStlBills.setStatus(0);
|
|
|
+ finStlBills.setBillStatus("0");
|
|
|
+ finStlBills.setBusinessType("STL");
|
|
|
+ finStlBills.setBillDate(date);
|
|
|
+ finStlBills.setDc("C");
|
|
|
+ finStlBills.setMblno(finStlBillsList.stream().map(FinStlBills::getMblno).filter(Objects::nonNull).distinct()
|
|
|
+ .collect(Collectors.joining(",")));
|
|
|
+ finStlBills.setHblno(finStlBillsList.stream().map(FinStlBills::getHblno).filter(Objects::nonNull).distinct()
|
|
|
+ .collect(Collectors.joining(",")));
|
|
|
+ finStlBills.setBusinessNo(finStlBillsList.stream().map(FinStlBills::getBusinessNo).filter(Objects::nonNull).distinct()
|
|
|
+ .collect(Collectors.joining(",")));
|
|
|
+ finStlBills.setRequestNo(finStlBillsList.stream().map(FinStlBills::getBillNo).filter(Objects::nonNull).distinct()
|
|
|
+ .collect(Collectors.joining(",")));
|
|
|
+ BusinessType businessType = bBusinessTypeService.getOne(new LambdaQueryWrapper<BusinessType>()
|
|
|
+ .eq(BusinessType::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(BusinessType::getIsDeleted, 0)
|
|
|
+ .eq(BusinessType::getStatus, 0)
|
|
|
+ .eq(BusinessType::getCode, "STL"));
|
|
|
+ if (businessType == null) {
|
|
|
+ throw new RuntimeException("未找到可用业务类型");
|
|
|
+ }
|
|
|
+ BusinessBillNo businessBillNo = new BusinessBillNo();
|
|
|
+ businessBillNo.setBusinessTypeId(businessType.getId());
|
|
|
+ businessBillNo.setCode("STL");
|
|
|
+ businessBillNo.setBranchId(finStlBills.getBranchId());
|
|
|
+ R<String> clientBillNo = businessBillNoService.getBillNoLos(businessBillNo);
|
|
|
+ if (!clientBillNo.isSuccess()) {
|
|
|
+ TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
|
|
|
+ return R.fail(500, "生成订单编号失败");
|
|
|
+ }
|
|
|
+ finStlBills.setBillNo((String) clientBillNo.getData());
|
|
|
+ finStlBills.setCreateTime(new Date());
|
|
|
+ finStlBills.setCreateUser(AuthUtil.getUserId());
|
|
|
+ finStlBills.setCreateUserName(AuthUtil.getUserName());
|
|
|
+ finStlBills.setUpdateUser(null);
|
|
|
+ finStlBills.setUpdateTime(null);
|
|
|
+ finStlBills.setUpdateUserName(null);
|
|
|
+ baseMapper.insert(finStlBills);
|
|
|
+ List<FinStlBillsItems> finInvoicesItems = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getSrcIdStatus, "0")
|
|
|
+ .in(FinStlBillsItems::getPid, idList));
|
|
|
+ if (!finInvoicesItems.isEmpty()) {
|
|
|
+ for (FinStlBillsItems item : finInvoicesItems) {
|
|
|
+ FinStlBillsItems finStlBillsItems = new FinStlBillsItems();
|
|
|
+ BeanUtil.copyProperties(item, finStlBillsItems);
|
|
|
+ finStlBillsItems.setId(null);
|
|
|
+ finStlBillsItems.setSrcIdInvoices(item.getId());
|
|
|
+ finStlBillsItems.setSrcIdStatus("1");
|
|
|
+ finStlBillsItems.setPid(finStlBills.getId());
|
|
|
+ finStlBillsItems.setUpdateUser(null);
|
|
|
+ finStlBillsItems.setUpdateTime(null);
|
|
|
+ finStlBillsItems.setUpdateUserName(null);
|
|
|
+ finStlBillsItemsList.add(finStlBillsItems);
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ item.setSrcIdInvoices(1L);
|
|
|
+ }
|
|
|
+ finStlBillsItemsService.saveBatch(finStlBillsItemsList);
|
|
|
+ finStlBillsItemsService.updateBatchById(finInvoicesItems);
|
|
|
+ }
|
|
|
+ for (FinStlBills item : finStlBillsList) {
|
|
|
+ item.setBillStatus("1");
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ this.updateBatchById(finStlBillsList);
|
|
|
+ if (!finStlBillsItemsList.isEmpty()) {
|
|
|
+ List<FinAccBills> finAccBillsListAll = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .select(FinAccBills::getId, FinAccBills::getBranchId, FinAccBills::getBranchName,
|
|
|
+ FinAccBills::getApprovedDate, FinAccBills::getVoucherDate, FinAccBills::getInvoiceDate, FinAccBills::getStlDate,
|
|
|
+ FinAccBills::getEta, FinAccBills::getEtd, FinAccBills::getAccountDate, FinAccBills::getBillDate,
|
|
|
+ FinAccBills::getReconciliationAmount, FinAccBills::getAccountDc,
|
|
|
+ FinAccBills::getAmountDr, FinAccBills::getAmountCr, FinAccBills::getReconciliationAmountUsd,
|
|
|
+ FinAccBills::getAmountDrUsd, FinAccBills::getAmountCrUsd, FinAccBills::getAppliedAmount,
|
|
|
+ FinAccBills::getAppliedAmountStl, FinAccBills::getAmountDrLoc, FinAccBills::getStlAmountDrLoc,
|
|
|
+ FinAccBills::getAmountCrLoc, FinAccBills::getStlAmountCrLoc, FinAccBills::getAppliedAmountUsd,
|
|
|
+ FinAccBills::getStlAmountDr, FinAccBills::getStlAmountDrUsd, FinAccBills::getStlAmountCr,
|
|
|
+ FinAccBills::getStlAmountCrUsd, FinAccBills::getAppliedAmountStlUsd)
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .in(FinAccBills::getId, finStlBillsItemsList.stream().map(FinStlBillsItems::getAccBillId).collect(Collectors.toList())));
|
|
|
+ if (finAccBillsListAll.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到账单数据");
|
|
|
+ }
|
|
|
+ String exrateType = currencyUtils.standardCurrency(finStlBills.getBranchId());
|
|
|
+ List<FeeCenter> feeCenterListAll = feeCenterService.list(new LambdaQueryWrapper<FeeCenter>()
|
|
|
+ .select(FeeCenter::getBranchId, FeeCenter::getBranchName, FeeCenter::getStlPid,
|
|
|
+ FeeCenter::getQuantityCntrDescr, FeeCenter::getApproveTime, FeeCenter::getApplyTime,
|
|
|
+ FeeCenter::getSignforDate, FeeCenter::getInvoiceDate, FeeCenter::getVoucherDate,
|
|
|
+ FeeCenter::getStlDate, FeeCenter::getCheckDate, FeeCenter::getAccDate,
|
|
|
+ FeeCenter::getId, FeeCenter::getAccBillId, FeeCenter::getVersion, FeeCenter::getAmount,
|
|
|
+ FeeCenter::getUnsettledAmount, FeeCenter::getStlTtlAmount, FeeCenter::getAppliedAmount)
|
|
|
+ .eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getAccStatus, 1)
|
|
|
+ .in(FeeCenter::getAccBillId, finAccBillsListAll.stream().map(FinAccBills::getId).collect(Collectors.toList()))
|
|
|
+ .apply("IF( amount < 0, amount < stl_ttl_amount, amount > stl_ttl_amount )")
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0));
|
|
|
+ if (feeCenterListAll.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到来源单据费用明细数据");
|
|
|
+ }
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBillsItemsList) {
|
|
|
+ FinAccBills finAccBills = finAccBillsListAll.stream().filter(e -> e.getId().equals(item.getAccBillId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ //计算字段null值处理
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().add(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = item.getCurrentStlAmount().multiply(item.getCurrentStlExrate());
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().add(cny));
|
|
|
+ finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStl().add(item.getCurrentStlAmount()));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getStlAmountDr().abs()) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getStlAmountDrUsd().abs()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (finAccBills.getStlAmountDr().abs().compareTo(finAccBills.getAmountDr().abs()) > 0 ||
|
|
|
+ finAccBills.getStlAmountDrUsd().abs().compareTo(finAccBills.getAmountDrUsd().abs()) > 0
|
|
|
+ ) {
|
|
|
+ throw new RuntimeException("结算金额大于账单金额,操作失败");
|
|
|
+ }
|
|
|
+ } else if ("C".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().add(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().add(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = item.getCurrentStlAmount().multiply(item.getCurrentStlExrate());
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().add(cny));
|
|
|
+ finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStlUsd().add(item.getCurrentStlAmount()));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getStlAmountCr().abs()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getStlAmountCrUsd().abs()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (finAccBills.getStlAmountCr().abs().compareTo(finAccBills.getAmountCr().abs()) > 0 ||
|
|
|
+ finAccBills.getStlAmountCrUsd().abs().compareTo(finAccBills.getAmountCrUsd().abs()) > 0
|
|
|
+ ) {
|
|
|
+ throw new RuntimeException("结算金额大于账单金额,操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(finStlBills.getId());
|
|
|
+ finAccBills.setStlBillNo(finStlBills.getBillNo());
|
|
|
+ finAccBills.setStlDate(new Date());
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ List<FeeCenter> feeCenters = feeCenterListAll.stream().filter(e -> e.getAccBillId().equals(finAccBills.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ BigDecimal currentStlAmount = item.getCurrentStlAmount();
|
|
|
+ BigDecimal stlTtlAmount = feeCenters.stream().map(FeeCenter::getStlTtlAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (item.getCurrentStlAmount().compareTo(new BigDecimal("0.00")) == 0 ||
|
|
|
+ item.getCurrentStlAmount().abs().compareTo(item.getAmount().abs().subtract(stlTtlAmount).abs()) > 0) {
|
|
|
+ throw new RuntimeException("本次结算金额不能为零或大于未结算金额");
|
|
|
+ }
|
|
|
+ for (FeeCenter e : feeCenters) {
|
|
|
+ int version = StringUtil.isBlank(e.getVersion()) ? 1 : Integer.parseInt(e.getVersion());
|
|
|
+ e.setVersion(String.valueOf(version + 1));
|
|
|
+ e.setTaxInvoiceNumber(item.getTaxInvoiceNumber());
|
|
|
+ e.setTaxInvoiceDate(item.getTaxInvoiceDate());
|
|
|
+ e.setDeductionTime(item.getDeductionTime());
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ //计算字段null值处理
|
|
|
+ e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(ObjectUtils.isNotNull(e.getUnsettledAmount()) ? e.getUnsettledAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlTtlAmount(ObjectUtils.isNotNull(e.getStlTtlAmount()) ? e.getStlTtlAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlBillId(finStlBills.getId());
|
|
|
+ e.setStlBillNo(finStlBills.getBillNo());
|
|
|
+ e.setStlDate(finStlBills.getBillDate());
|
|
|
+ e.setStlOrgAmount(item.getCurrentStlAmount().multiply(item.getExrate()));
|
|
|
+ e.setStlCurCode(item.getCurrentStlCurCode());
|
|
|
+ e.setStlExrate(item.getExrate());
|
|
|
+ e.setStlExrateLoc(item.getCurrentStlExrate());
|
|
|
+ e.setStlAmount(item.getCurrentStlAmount());
|
|
|
+ e.setStlAmountLoc(item.getCurrentStlAmountLoc());
|
|
|
+ e.setStlStatus(1);
|
|
|
+ e.setStlById(finStlBills.getCreateUser());
|
|
|
+ e.setStlByName(finStlBills.getCreateUserName());
|
|
|
+ if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) > 0) {
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()).subtract(currentStlAmount));
|
|
|
+ e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
|
|
|
+ e.setAppliedAmountStl(e.getAppliedAmountStl().add(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (e.getAmount().abs().subtract(e.getStlTtlAmount().abs()).compareTo(currentStlAmount.abs()) == 0) {
|
|
|
+ e.setUnsettledAmount(new BigDecimal("0.00"));
|
|
|
+ e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
|
|
|
+ e.setAppliedAmountStl(e.getAppliedAmountStl().add(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ e.setUnsettledAmount(new BigDecimal("0.00"));
|
|
|
+ e.setAppliedAmountStl(e.getAppliedAmountStl().add((e.getAmount().subtract(e.getStlTtlAmount()))));
|
|
|
+ currentStlAmount = currentStlAmount.subtract((e.getAmount().subtract(e.getStlTtlAmount())));
|
|
|
+ e.setStlTtlAmount(e.getAmount().subtract(e.getUnsettledAmount()));
|
|
|
+ e.setAppliedAmountStl(e.getAmount().subtract(e.getUnsettledAmount()).subtract(e.getAppliedAmountStl()));
|
|
|
+ }
|
|
|
+ feeCenterList.add(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ throw new RuntimeException("结算金额计算错误,操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ this.countFeeItems(finStlBills, finStlBillsItemsList, exrateType);
|
|
|
+ baseMapper.updateById(finStlBills);
|
|
|
+ }
|
|
|
+ return R.data(finStlBills);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
+ public R revokeGenerateFinStlBillsV1(String billId) {
|
|
|
+ if (ObjectUtils.isNull(billId)) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinStlBills finStlBills = baseMapper.selectById(billId);
|
|
|
+ if (3 == finStlBills.getStatus()) {
|
|
|
+ throw new RuntimeException("已结算,撤销失败");
|
|
|
+ }
|
|
|
+ finStlBills.setRequestNo("");
|
|
|
+ List<FinStlBillsItems> finStlBillsItemsList = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .eq(FinStlBillsItems::getPid, billId));
|
|
|
+ finStlBillsItemsService.removeByIds(finStlBillsItemsList.stream().map(FinStlBillsItems::getId).collect(Collectors.toList()));
|
|
|
+ List<Long> ids = finStlBillsItemsList.stream().map(FinStlBillsItems::getSrcIdInvoices).collect(Collectors.toList());
|
|
|
+ if (!ids.isEmpty()) {
|
|
|
+ List<FinStlBillsItems> finStlBillsItems = finStlBillsItemsService.list(new LambdaQueryWrapper<FinStlBillsItems>()
|
|
|
+ .eq(FinStlBillsItems::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBillsItems::getIsDeleted, 0)
|
|
|
+ .in(FinStlBillsItems::getId, ids));
|
|
|
+ if (!finStlBillsItems.isEmpty()) {
|
|
|
+ for (FinStlBillsItems item : finStlBillsItems) {
|
|
|
+ item.setSrcIdStatus("0");
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ List<FinStlBills> finStlBillsList = baseMapper.selectList(new LambdaQueryWrapper<FinStlBills>()
|
|
|
+ .eq(FinStlBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinStlBills::getIsDeleted, 0)
|
|
|
+ .in(FinStlBills::getId, finStlBillsItems.stream().map(FinStlBillsItems::getPid).distinct().collect(Collectors.toList())));
|
|
|
+ for (FinStlBills item : finStlBillsList) {
|
|
|
+ item.setBillStatus("0");
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ }
|
|
|
+ this.updateBatchById(finStlBillsList);
|
|
|
+ finStlBillsItemsService.updateBatchById(finStlBillsItems);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!finStlBillsItemsList.isEmpty()) {
|
|
|
+ String exrateType = currencyUtils.standardCurrency(finStlBills.getBranchId());
|
|
|
+ List<BCurExrate> curExrateList = currencyUtils.obtainRate(new Date(), "2", finStlBills.getBranchId());
|
|
|
+ List<FinAccBills> finAccBillsListAll = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .in(FinAccBills::getId, finStlBillsItemsList.stream().map(FinStlBillsItems::getAccBillId).collect(Collectors.toList())));
|
|
|
+ if (finAccBillsListAll.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到账单数据");
|
|
|
+ }
|
|
|
+ LambdaQueryWrapper<FeeCenter> lambdaQueryWrapper = new LambdaQueryWrapper<>();
|
|
|
+ lambdaQueryWrapper.eq(FeeCenter::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FeeCenter::getAccStatus, 1)
|
|
|
+ .eq(FeeCenter::getIsDeleted, 0)
|
|
|
+ .apply("stl_ttl_amount != 0");
|
|
|
+ List<FeeCenter> feeCenterListAll = feeCenterService.list(lambdaQueryWrapper);
|
|
|
+ if (feeCenterListAll.isEmpty()) {
|
|
|
+ throw new RuntimeException("未查到来源单据费用明细数据");
|
|
|
+ }
|
|
|
+ List<FinAccBills> finAccBillsList = new ArrayList<>();
|
|
|
+ List<FeeCenter> feeCenterList = new ArrayList<>();
|
|
|
+ for (FinStlBillsItems item : finStlBillsItemsList) {
|
|
|
+ FinAccBills finAccBills = finAccBillsListAll.stream().filter(e -> e.getId().equals(item.getAccBillId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ if (finAccBills == null) {
|
|
|
+ throw new RuntimeException("未找到账单明细,操作失败");
|
|
|
+ }
|
|
|
+ boolean status = Boolean.FALSE;
|
|
|
+ //计算字段null值处理
|
|
|
+ if ("D".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountDr(finAccBills.getStlAmountDr().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountDrUsd(finAccBills.getStlAmountDrUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = currencyUtils.converter(item.getDc(), curExrateList, item.getCurrentStlAmount(), item.getCurCode(), "2");
|
|
|
+ finAccBills.setStlAmountDrLoc(finAccBills.getStlAmountDrLoc().subtract(cny));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountDr().compareTo(new BigDecimal("0.00")) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ finAccBills.setIsCleared(0);
|
|
|
+ } else if (finAccBills.getAmountDr().abs().compareTo(new BigDecimal("0.00")) < 0 ||
|
|
|
+ finAccBills.getAmountDrUsd().abs().compareTo(new BigDecimal("0.00")) < 0) {
|
|
|
+ throw new RuntimeException("撤销金额大于账单金额,操作失败");
|
|
|
+ } else {
|
|
|
+ if (finAccBills.getAmountDr().abs().compareTo(finAccBills.getStlAmountDr().abs()) == 0 &&
|
|
|
+ finAccBills.getAmountDrUsd().abs().compareTo(finAccBills.getStlAmountDrUsd().abs()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ } else if ("C".equals(item.getDc())) {
|
|
|
+ if (exrateType.equals(item.getCurCode())) {
|
|
|
+ finAccBills.setStlAmountCr(finAccBills.getStlAmountCr().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(item.getCurrentStlAmount()));
|
|
|
+ finAccBills.setAppliedAmountStl(finAccBills.getAppliedAmountStl().subtract(item.getCurrentStlAmount()));
|
|
|
+ } else {
|
|
|
+ finAccBills.setStlAmountCrUsd(finAccBills.getStlAmountCrUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ BigDecimal cny = currencyUtils.converter(item.getDc(), curExrateList, item.getCurrentStlAmount(), item.getCurCode(), "2");
|
|
|
+ finAccBills.setStlAmountCrLoc(finAccBills.getStlAmountCrLoc().subtract(cny));
|
|
|
+ finAccBills.setAppliedAmountStlUsd(finAccBills.getAppliedAmountStlUsd().subtract(item.getCurrentStlAmount()));
|
|
|
+ }
|
|
|
+ if (finAccBills.getAmountCr().compareTo(new BigDecimal("0.00")) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ finAccBills.setIsCleared(0);
|
|
|
+ } else if (finAccBills.getAmountCr().abs().compareTo(new BigDecimal("0.00")) < 0 ||
|
|
|
+ finAccBills.getAmountCrUsd().abs().compareTo(new BigDecimal("0.00")) < 0) {
|
|
|
+ throw new RuntimeException("撤销金额大于账单金额,操作失败");
|
|
|
+ } else {
|
|
|
+ if (finAccBills.getAmountCr().abs().compareTo(finAccBills.getStlAmountCr()) == 0 &&
|
|
|
+ finAccBills.getAmountCrUsd().abs().compareTo(finAccBills.getStlAmountCrUsd()) == 0) {
|
|
|
+ status = true;
|
|
|
+ }
|
|
|
+ if (status) {
|
|
|
+ finAccBills.setIsCleared(9);
|
|
|
+ } else {
|
|
|
+ finAccBills.setIsCleared(3);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finAccBills.setStlBillId(0L);
|
|
|
+ finAccBills.setStlBillNo("");
|
|
|
+ finAccBills.setStlDate(null);
|
|
|
+ finAccBills.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ finAccBills.setUpdateTime(new Date());
|
|
|
+ finAccBills.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ finAccBillsList.add(finAccBills);
|
|
|
+ List<FeeCenter> feeCenters = feeCenterListAll.stream().filter(e -> e.getAccBillId().equals(finAccBills.getId()))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ BigDecimal currentStlAmount = item.getCurrentStlAmount();
|
|
|
+ for (FeeCenter e : feeCenters) {
|
|
|
+ int version = StringUtil.isBlank(e.getVersion()) ? 1 : Integer.parseInt(e.getVersion());
|
|
|
+ e.setVersion(String.valueOf(version + 1));
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) == 0) {
|
|
|
+ break;
|
|
|
+ } else {
|
|
|
+ //计算字段null值处理
|
|
|
+ e.setAmount(ObjectUtils.isNotNull(e.getAmount()) ? e.getAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(ObjectUtils.isNotNull(e.getUnsettledAmount()) ? e.getUnsettledAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlTtlAmount(ObjectUtils.isNotNull(e.getStlTtlAmount()) ? e.getStlTtlAmount() : new BigDecimal("0.00"));
|
|
|
+ e.setStlBillId(0L);
|
|
|
+ e.setStlBillNo("");
|
|
|
+ e.setStlDate(null);
|
|
|
+ e.setStlOrgAmount(new BigDecimal("0.00"));
|
|
|
+ e.setStlCurCode("");
|
|
|
+ e.setStlExrate(new BigDecimal("0.00"));
|
|
|
+ e.setStlExrateLoc(new BigDecimal("0.00"));
|
|
|
+ e.setStlAmount(new BigDecimal("0.00"));
|
|
|
+ e.setStlAmountLoc(new BigDecimal("0.00"));
|
|
|
+ e.setStlStatus(0);
|
|
|
+ e.setStlById(0L);
|
|
|
+ e.setStlByName("");
|
|
|
+ if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) > 0) {
|
|
|
+ e.setStlTtlAmount(e.getStlTtlAmount().subtract(currentStlAmount));
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
|
|
|
+ e.setAppliedAmountStl(e.getAppliedAmountStl().subtract(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else if (e.getStlTtlAmount().abs().compareTo(currentStlAmount.abs()) == 0) {
|
|
|
+ e.setStlTtlAmount(new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
|
|
|
+ e.setAppliedAmountStl(e.getAmount().subtract(e.getAppliedAmountStl()).subtract(currentStlAmount));
|
|
|
+ currentStlAmount = new BigDecimal("0.00");
|
|
|
+ } else {
|
|
|
+ e.setStlTtlAmount(new BigDecimal("0.00"));
|
|
|
+ e.setUnsettledAmount(e.getAmount().subtract(e.getStlTtlAmount()));
|
|
|
+ e.setAppliedAmountStl(new BigDecimal("0.00"));
|
|
|
+ currentStlAmount = currentStlAmount.subtract(e.getAmount());
|
|
|
+ }
|
|
|
+ feeCenterList.add(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (currentStlAmount.compareTo(new BigDecimal("0.00")) != 0) {
|
|
|
+ throw new RuntimeException("撤销金额计算错误,操作失败");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ feeCenterService.saveOrUpdateBatch(feeCenterList);
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ this.revokeFeeItems(finStlBills, finStlBillsItemsList, exrateType);
|
|
|
+ baseMapper.updateById(finStlBills);
|
|
|
+ }
|
|
|
+ return R.data(finStlBills);
|
|
|
+ }
|
|
|
+
|
|
|
}
|