|
|
@@ -25,8 +25,15 @@ import org.springblade.core.secure.utils.AuthUtil;
|
|
|
import org.springblade.core.tool.api.R;
|
|
|
import org.springblade.los.basic.business.entity.BusinessType;
|
|
|
import org.springblade.los.basic.business.service.IBusinessTypeService;
|
|
|
+import org.springblade.los.basic.cur.service.IBCurrencyService;
|
|
|
import org.springblade.los.billno.entity.BusinessBillNo;
|
|
|
import org.springblade.los.billno.service.IBusinessBillNoService;
|
|
|
+import org.springblade.los.business.sea.entity.Bills;
|
|
|
+import org.springblade.los.business.sea.mapper.BillsMapper;
|
|
|
+import org.springblade.los.finance.fee.entity.FeeCenter;
|
|
|
+import org.springblade.los.finance.fee.entity.FinAccBills;
|
|
|
+import org.springblade.los.finance.fee.service.IFeeCenterService;
|
|
|
+import org.springblade.los.finance.fee.service.IFinAccBillsService;
|
|
|
import org.springblade.los.finance.invoices.entity.FinInvoices;
|
|
|
import org.springblade.los.finance.invoices.entity.FinInvoicesItems;
|
|
|
import org.springblade.los.finance.invoices.mapper.FinInvoicesMapper;
|
|
|
@@ -37,8 +44,13 @@ import org.springblade.system.feign.ISysClient;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
|
|
|
|
|
+import java.math.BigDecimal;
|
|
|
+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;
|
|
|
|
|
|
/**
|
|
|
* 业务-发票主表 服务实现类
|
|
|
@@ -58,6 +70,14 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
|
|
|
private final IBusinessTypeService bBusinessTypeService;
|
|
|
|
|
|
+ private final IBCurrencyService bCurrencyService;
|
|
|
+
|
|
|
+ private final IFeeCenterService feeCenterService;
|
|
|
+
|
|
|
+ private final IFinAccBillsService finAccBillsService;
|
|
|
+
|
|
|
+ private final BillsMapper billsMapper;
|
|
|
+
|
|
|
@Override
|
|
|
public IPage<FinInvoicesVO> selectFinInvoicesPage(IPage<FinInvoicesVO> page, FinInvoicesVO finInvoices) {
|
|
|
return page.setRecords(baseMapper.selectFinInvoicesPage(page, finInvoices));
|
|
|
@@ -108,7 +128,28 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
}
|
|
|
this.saveOrUpdate(finInvoices);
|
|
|
if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
|
|
|
+
|
|
|
for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
|
|
|
+ //计算字段null值处理
|
|
|
+ item.setCurrentAmount(ObjectUtils.isNotNull(item.getCurrentAmount()) ? item.getCurrentAmount() : new BigDecimal("0.00"));
|
|
|
+ item.setAmount(ObjectUtils.isNotNull(item.getAmount()) ? item.getAmount() : new BigDecimal("0.00"));
|
|
|
+
|
|
|
+ //判断是否是本位币
|
|
|
+ if ("CNY".equals(item.getCurrentCurCode())) {
|
|
|
+ item.setCurrentAmountLoc(item.getCurrentAmount());
|
|
|
+ } else {
|
|
|
+ item.setCurrentAmountLoc(bCurrencyService.converterCny(item.getCurrentCurCode(), item.getCurrentAmount()));
|
|
|
+ }
|
|
|
+ // 去税金额 = 本次结算金额currentStlAmount - 税额amountTax
|
|
|
+ BigDecimal amountNet = new BigDecimal("0.00");
|
|
|
+ // 税额 = 本次结算金额currentStlAmount / 总金额 * 总税额amountTax
|
|
|
+ BigDecimal amountTax = new BigDecimal("0.00");
|
|
|
+ // 税额
|
|
|
+ amountTax = amountTax.add(item.getCurrentAmount().divide(item.getAmount(), 2, RoundingMode.HALF_UP)
|
|
|
+ .multiply(item.getAmountTax()));
|
|
|
+ amountNet = amountNet.add(item.getCurrentAmount().subtract(amountTax));
|
|
|
+ item.setCurrentAmountTax(amountTax);
|
|
|
+ item.setCurrentAmountNet(amountNet);
|
|
|
item.setPid(finInvoices.getId());
|
|
|
if (item.getId() == null) {
|
|
|
item.setCreateTime(new Date());
|
|
|
@@ -126,8 +167,24 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
}
|
|
|
}
|
|
|
finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
|
|
|
+ BigDecimal amountCny = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountUsd = new BigDecimal("0.00");
|
|
|
+ BigDecimal amountTax = new BigDecimal("0.00");
|
|
|
+ amountCny = amountCny.add(finInvoices.getFinInvoicesItemsList().stream()
|
|
|
+ .filter(e -> "CNY".equals(e.getCurrentCurCode())).map(FinInvoicesItems::getCurrentAmount)
|
|
|
+ .filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ finInvoices.setAmountCny(amountCny);
|
|
|
+ amountUsd = amountUsd.add(finInvoices.getFinInvoicesItemsList().stream()
|
|
|
+ .filter(e -> "USD".equals(e.getCurrentCurCode())).map(FinInvoicesItems::getCurrentAmount)
|
|
|
+ .filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ finInvoices.setAmountUsd(amountUsd);
|
|
|
+ amountTax = amountTax.add(finInvoices.getFinInvoicesItemsList().stream()
|
|
|
+ .filter(e -> "CNY".equals(e.getCurrentCurCode())).map(FinInvoicesItems::getCurrentAmountTax)
|
|
|
+ .filter(ObjectUtils::isNotNull).reduce(BigDecimal.ZERO, BigDecimal::add));
|
|
|
+ finInvoices.setAmountTax(amountTax);
|
|
|
+ finInvoices.setAmountLoc(amountCny.add(bCurrencyService.converterCny("USD", amountUsd)));
|
|
|
}
|
|
|
-
|
|
|
+ this.saveOrUpdate(finInvoices);
|
|
|
return R.data(finInvoices);
|
|
|
}
|
|
|
|
|
|
@@ -145,4 +202,259 @@ public class FinInvoicesServiceImpl extends ServiceImpl<FinInvoicesMapper, FinIn
|
|
|
return detail;
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ public R confirmfinInvoices(FinInvoices finInvoices) {
|
|
|
+ if (finInvoices.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinInvoices detail = baseMapper.selectById(finInvoices.getId());
|
|
|
+ if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
|
|
|
+ //明细状态修改 已开发票
|
|
|
+ for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
|
|
|
+ item.setBillDate(finInvoices.getBillDate());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
|
|
|
+ //通过明细里账单id查询具体账单数据
|
|
|
+ List<Long> accIds = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId)
|
|
|
+ .filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .in(FinAccBills::getId, accIds));
|
|
|
+ //修改账单中对账状态
|
|
|
+ for (FinAccBills item : finAccBillsList) {
|
|
|
+ item.setInvoiceBillId(detail.getId() + "");
|
|
|
+ item.setInvoiceBillNo(detail.getBillNo());
|
|
|
+ item.setInvoiceNo(detail.getInvoiceNo());
|
|
|
+ item.setInvoiceDate(detail.getInvoiceDate());
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ //通过账单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);
|
|
|
+ List<Bills> billsList = new ArrayList<>();
|
|
|
+ List<Long> ids = feeCenterListNew.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ BigDecimal idsD = feeCenterListNew.stream().filter(e -> "D".equals(e.getDc())).map(FeeCenter::getUninvoicedAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal idsC = feeCenterListNew.stream().filter(e -> "C".equals(e.getDc())).map(FeeCenter::getUninvoicedAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ List<Long> divideIds = feeCenterListNew.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ BigDecimal divideIdsD = feeCenterListNew.stream().filter(e -> "D".equals(e.getDc())).map(FeeCenter::getUninvoicedAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal divideIdsC = feeCenterListNew.stream().filter(e -> "C".equals(e.getDc())).map(FeeCenter::getUninvoicedAmount).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
|
|
|
+ billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, ids));
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(divideIds) && divideIds.size() > 0) {
|
|
|
+ List<Bills> divideBillsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, divideIds));
|
|
|
+ billsList.addAll(divideBillsList);
|
|
|
+ }
|
|
|
+ for (Bills item : billsList) {
|
|
|
+ item.setBillingStatus(item.getBillingStatus() + 1);
|
|
|
+ BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getBusinessBillId, item.getId())
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .eq(FinAccBills::getAccountDc, "D")).stream()
|
|
|
+ .map(FinAccBills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getBusinessBillId, item.getId())
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .eq(FinAccBills::getAccountDc, "C")).stream()
|
|
|
+ .map(FinAccBills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ if (item.getCheckDrStatus() != 9) {
|
|
|
+ Bills bills = reconciliation(item, countD, divideIdsD, countC, divideIdsC, idsD, idsC, detail.getType());
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ } else {
|
|
|
+ billsMapper.updateById(item);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ }
|
|
|
+ detail.setStatus(1);
|
|
|
+ baseMapper.updateById(detail);
|
|
|
+ return R.data(detail);
|
|
|
+ }
|
|
|
+
|
|
|
+ private Bills reconciliation(Bills item, BigDecimal countD, BigDecimal divideIdsD, BigDecimal countC, BigDecimal divideIdsC, BigDecimal idsD, BigDecimal idsC, String type) {
|
|
|
+ if ("MH".equals(item.getBillType())) {
|
|
|
+ if ("进项".equals(type)) {
|
|
|
+ if (countC.compareTo(divideIdsC) == 0) {
|
|
|
+ item.setInvoiceCrStatus(9);
|
|
|
+ item.setInvoiceCrStatusDescr("全开");
|
|
|
+ } else {
|
|
|
+ item.setInvoiceCrStatus(3);
|
|
|
+ item.setInvoiceCrStatusDescr("部分");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (countD.compareTo(divideIdsD) == 0) {
|
|
|
+ item.setInvoiceDrStatus(9);
|
|
|
+ item.setInvoiceDrStatusDescr("全开");
|
|
|
+ } else {
|
|
|
+ item.setInvoiceDrStatus(3);
|
|
|
+ item.setInvoiceDrStatusDescr("部分");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+ if ("进项".equals(type)) {
|
|
|
+ if (countC.compareTo(idsC) == 0) {
|
|
|
+ item.setInvoiceCrStatus(9);
|
|
|
+ item.setInvoiceCrStatusDescr("全开");
|
|
|
+ } else {
|
|
|
+ item.setInvoiceCrStatus(3);
|
|
|
+ item.setInvoiceCrStatusDescr("部分");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (countD.compareTo(idsD) == 0) {
|
|
|
+ item.setInvoiceDrStatus(9);
|
|
|
+ item.setInvoiceDrStatusDescr("全开");
|
|
|
+ } else {
|
|
|
+ item.setInvoiceDrStatus(3);
|
|
|
+ item.setInvoiceDrStatusDescr("部分");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return item;
|
|
|
+ }
|
|
|
+
|
|
|
+ private List<FeeCenter> reconciliationFeeCenter(FinInvoices detail, List<FeeCenter> feeCenterList, int count) {
|
|
|
+ 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.setUninvoicedAmount(item.getUninvoicedAmount().add(detail.getAmountLoc()));
|
|
|
+ item.setInvoiceById(detail.getCreateUser());
|
|
|
+ item.setInvoiceByName(detail.getCreateUserName());
|
|
|
+ } else {
|
|
|
+ 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());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return feeCenterList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R revokeFinInvoices(FinInvoices finInvoices) {
|
|
|
+ if (finInvoices.getId() == null) {
|
|
|
+ throw new RuntimeException("缺少必要参数");
|
|
|
+ }
|
|
|
+ FinInvoices detail = baseMapper.selectById(finInvoices.getId());
|
|
|
+ if (ObjectUtils.isNotNull(finInvoices.getFinInvoicesItemsList())) {
|
|
|
+ for (FinInvoicesItems item : finInvoices.getFinInvoicesItemsList()) {
|
|
|
+ item.setBillDate(null);
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ finInvoicesItemsService.saveOrUpdateBatch(finInvoices.getFinInvoicesItemsList());
|
|
|
+ List<Long> accIds = finInvoices.getFinInvoicesItemsList().stream().map(FinInvoicesItems::getAccBillId)
|
|
|
+ .filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ List<FinAccBills> finAccBillsList = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .in(FinAccBills::getId, accIds)
|
|
|
+ .eq(FinAccBills::getIsChecked, 1));
|
|
|
+ for (FinAccBills item : finAccBillsList) {
|
|
|
+ item.setInvoiceBillId("");
|
|
|
+ item.setInvoiceBillNo("");
|
|
|
+ item.setInvoiceNo("");
|
|
|
+ item.setInvoiceDate(null);
|
|
|
+ item.setUpdateUser(AuthUtil.getUserId());
|
|
|
+ item.setUpdateTime(new Date());
|
|
|
+ item.setUpdateUserName(AuthUtil.getUserName());
|
|
|
+ }
|
|
|
+ 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);
|
|
|
+ finAccBillsService.saveOrUpdateBatch(finAccBillsList);
|
|
|
+ List<Bills> billsList = new ArrayList<>();
|
|
|
+ List<Long> ids = feeCenterListNew.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ BigDecimal idsD = feeCenterListNew.stream().filter(e -> "D".equals(e.getDc())).map(FeeCenter::getInvoiceAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal idsC = feeCenterListNew.stream().filter(e -> "C".equals(e.getDc())).map(FeeCenter::getInvoiceAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ List<Long> divideIds = feeCenterListNew.stream().map(FeeCenter::getPid).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
+ BigDecimal divideIdsD = feeCenterListNew.stream().filter(e -> "D".equals(e.getDc())).map(FeeCenter::getInvoiceAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal divideIdsC = feeCenterListNew.stream().filter(e -> "C".equals(e.getDc())).map(FeeCenter::getInvoiceAmountLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+
|
|
|
+ if (ObjectUtils.isNotNull(ids) && ids.size() > 0) {
|
|
|
+ billsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, ids));
|
|
|
+ }
|
|
|
+ if (ObjectUtils.isNotNull(divideIds) && divideIds.size() > 0) {
|
|
|
+ List<Bills> divideBillsList = billsMapper.selectList(new LambdaQueryWrapper<Bills>()
|
|
|
+ .eq(Bills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(Bills::getIsDeleted, 0)
|
|
|
+ .in(Bills::getId, divideIds));
|
|
|
+ billsList.addAll(divideBillsList);
|
|
|
+ }
|
|
|
+ for (Bills item : billsList) {
|
|
|
+ if (item.getBillingStatus() == 0) {
|
|
|
+ throw new RuntimeException("撤销对账失败");
|
|
|
+ }
|
|
|
+ item.setBillingStatus(item.getBillingStatus() - 1);
|
|
|
+ BigDecimal countD = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getBusinessBillId, item.getId())
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .eq(FinAccBills::getAccountDc, "D")).stream()
|
|
|
+ .map(FinAccBills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ BigDecimal countC = finAccBillsService.list(new LambdaQueryWrapper<FinAccBills>()
|
|
|
+ .eq(FinAccBills::getBusinessBillId, item.getId())
|
|
|
+ .eq(FinAccBills::getTenantId, AuthUtil.getTenantId())
|
|
|
+ .eq(FinAccBills::getIsDeleted, 0)
|
|
|
+ .eq(FinAccBills::getAccountDc, "C")).stream()
|
|
|
+ .map(FinAccBills::getAmountDrLoc).filter(Objects::nonNull).reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ Bills bills = reconciliation(item, countD, divideIdsD, countC, divideIdsC, idsD, idsC, detail.getType());
|
|
|
+ billsMapper.updateById(bills);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ detail.setStatus(2);
|
|
|
+ baseMapper.updateById(detail);
|
|
|
+ return R.data(detail);
|
|
|
+ }
|
|
|
+
|
|
|
}
|