后端查询账单金额,已收未收等数据;
This commit is contained in:
+73
@@ -2,12 +2,14 @@ package com.mhd.bms.application.server.receiptManage;
|
|||||||
|
|
||||||
import cn.hutool.core.util.ObjectUtil;
|
import cn.hutool.core.util.ObjectUtil;
|
||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||||
|
import com.mhd.bms.domain.billManage.entity.BillManage;
|
||||||
import com.mhd.bms.domain.billManage.service.BillManageDomainService;
|
import com.mhd.bms.domain.billManage.service.BillManageDomainService;
|
||||||
import com.mhd.bms.domain.receiptManage.entity.ReceiptManage;
|
import com.mhd.bms.domain.receiptManage.entity.ReceiptManage;
|
||||||
import com.mhd.bms.domain.receiptManage.repository.po.ReceiptManagePO;
|
import com.mhd.bms.domain.receiptManage.repository.po.ReceiptManagePO;
|
||||||
import com.mhd.bms.domain.receiptManage.repository.todo.ReceiptManageDO;
|
import com.mhd.bms.domain.receiptManage.repository.todo.ReceiptManageDO;
|
||||||
import com.mhd.bms.domain.receiptManage.service.ReceiptManageDomainService;
|
import com.mhd.bms.domain.receiptManage.service.ReceiptManageDomainService;
|
||||||
import com.mhd.bms.infrastructure.utils.CheckPasswordUtil;
|
import com.mhd.bms.infrastructure.utils.CheckPasswordUtil;
|
||||||
|
import com.mhd.bms.interfaces.dto.receiptManage.ReceiptDetailDTO;
|
||||||
import com.mhd.bms.interfaces.dto.receiptManage.ReceiptManageDTO;
|
import com.mhd.bms.interfaces.dto.receiptManage.ReceiptManageDTO;
|
||||||
import com.mhd.common.core.exception.ServiceException;
|
import com.mhd.common.core.exception.ServiceException;
|
||||||
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
|
import com.mhd.common.core.exception.digitalLogisticsException.DigitalLogisticsException;
|
||||||
@@ -20,9 +22,11 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
import org.springframework.transaction.interceptor.TransactionAspectSupport;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
@@ -161,6 +165,8 @@ public class ReceiptManageApplicationService {
|
|||||||
int index = 1;
|
int index = 1;
|
||||||
for (ReceiptManageDO receiptManageDO : receiptManageDOList) {
|
for (ReceiptManageDO receiptManageDO : receiptManageDOList) {
|
||||||
try {
|
try {
|
||||||
|
//根据账单id查询账单当前金额数据,替换前端传的账单金额、已收金额、未收金额等(仅保留前端传的收款金额和优惠金额)
|
||||||
|
fillBillAmountFromBillManage(receiptManageDO);
|
||||||
Boolean flag = batchCollection(receiptManageDO);
|
Boolean flag = batchCollection(receiptManageDO);
|
||||||
if (!Boolean.TRUE.equals(flag)) {
|
if (!Boolean.TRUE.equals(flag)) {
|
||||||
throw new ServiceException("收款数据处理失败");
|
throw new ServiceException("收款数据处理失败");
|
||||||
@@ -176,6 +182,73 @@ public class ReceiptManageApplicationService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 排队批量收款-根据账单id查询账单当前金额,替换前端传的账单金额、已收金额、未收金额、剩余未收(仅保留前端传的收款金额和优惠金额)
|
||||||
|
*/
|
||||||
|
private void fillBillAmountFromBillManage(ReceiptManageDO receiptManageDO) {
|
||||||
|
List<ReceiptDetailDTO> receiptDetailDTOList = receiptManageDO.getReceiptDetailDTOList();
|
||||||
|
if (null == receiptDetailDTOList || receiptDetailDTOList.size() == 0) {
|
||||||
|
throw new ServiceException("费用结算明细不能为空");
|
||||||
|
}
|
||||||
|
//汇总收款明细的账单id并查询账单当前数据
|
||||||
|
Set<Long> billManageIdSet = receiptDetailDTOList.stream().map(ReceiptDetailDTO::getBillManageId).filter(ObjectUtil::isNotNull).collect(Collectors.toSet());
|
||||||
|
if (billManageIdSet.size() == 0) {
|
||||||
|
throw new ServiceException("收款账单不能为空");
|
||||||
|
}
|
||||||
|
LambdaQueryWrapper<BillManage> queryWrapper = new LambdaQueryWrapper<>();
|
||||||
|
queryWrapper.in(BillManage::getBillManageId, billManageIdSet);
|
||||||
|
queryWrapper.eq(BillManage::getDelFlag, 1);
|
||||||
|
List<BillManage> billManageList = billManageDomainService.queryListLambda(queryWrapper);
|
||||||
|
if (null == billManageList || billManageList.size() == 0) {
|
||||||
|
throw new ServiceException("账单信息未找到");
|
||||||
|
}
|
||||||
|
Map<Long, BillManage> billManageMap = billManageList.stream().collect(Collectors.toMap(BillManage::getBillManageId, billManage -> billManage, (oldValue, newValue) -> oldValue));
|
||||||
|
//汇总账单金额、已收金额、未收金额、收款金额、优惠金额
|
||||||
|
BigDecimal billAmount = BigDecimal.ZERO;
|
||||||
|
BigDecimal billAmountSettlement = BigDecimal.ZERO;
|
||||||
|
BigDecimal billAmountUnsettled = BigDecimal.ZERO;
|
||||||
|
BigDecimal collectedAmount = BigDecimal.ZERO;
|
||||||
|
BigDecimal collectedDiscount = BigDecimal.ZERO;
|
||||||
|
for (ReceiptDetailDTO receiptDetailDTO : receiptDetailDTOList) {
|
||||||
|
BillManage billManage = billManageMap.get(receiptDetailDTO.getBillManageId());
|
||||||
|
if (null == billManage) {
|
||||||
|
throw new ServiceException("账单" + receiptDetailDTO.getBillNumber() + "信息未找到,请刷新后重试");
|
||||||
|
}
|
||||||
|
//只取前端传的收款金额、优惠金额,为空按0处理
|
||||||
|
BigDecimal detailCollectedAmount = null == receiptDetailDTO.getCollectedAmount() ? BigDecimal.ZERO : receiptDetailDTO.getCollectedAmount();
|
||||||
|
BigDecimal detailCollectedDiscount = null == receiptDetailDTO.getCollectedDiscount() ? BigDecimal.ZERO : receiptDetailDTO.getCollectedDiscount();
|
||||||
|
//账单当前金额以数据库为准
|
||||||
|
BigDecimal detailBillAmount = billManage.getBillAmount();
|
||||||
|
BigDecimal detailBillAmountSettlement = billManage.getBillAmountSettlement();
|
||||||
|
BigDecimal detailBillAmountUnsettled = billManage.getBillAmountUnsettled();
|
||||||
|
//剩余未收金额 = 未收金额 - 收款金额 - 优惠金额
|
||||||
|
BigDecimal detailBillAmountUnsettledResidue = detailBillAmountUnsettled.subtract(detailCollectedAmount).subtract(detailCollectedDiscount);
|
||||||
|
if (detailBillAmountUnsettledResidue.compareTo(BigDecimal.ZERO) < 0) {
|
||||||
|
throw new ServiceException("账单" + billManage.getBillNumber() + "未收金额小于本次收款金额与优惠金额之和,无法完成收款,请刷新后重试");
|
||||||
|
}
|
||||||
|
//用数据库当前值替换前端传的账单金额、已收金额、未收金额、剩余未收
|
||||||
|
receiptDetailDTO.setBillAmount(detailBillAmount);
|
||||||
|
receiptDetailDTO.setBillAmountSettlement(detailBillAmountSettlement);
|
||||||
|
receiptDetailDTO.setBillAmountUnsettled(detailBillAmountUnsettled);
|
||||||
|
receiptDetailDTO.setBillAmountUnsettledResidue(detailBillAmountUnsettledResidue);
|
||||||
|
//累计收款单金额
|
||||||
|
billAmount = billAmount.add(detailBillAmount);
|
||||||
|
billAmountSettlement = billAmountSettlement.add(detailBillAmountSettlement);
|
||||||
|
billAmountUnsettled = billAmountUnsettled.add(detailBillAmountUnsettled);
|
||||||
|
collectedAmount = collectedAmount.add(detailCollectedAmount);
|
||||||
|
collectedDiscount = collectedDiscount.add(detailCollectedDiscount);
|
||||||
|
}
|
||||||
|
//收款单金额:账单金额、已收金额、未收金额取查询值汇总,收款金额、优惠金额取前端传值汇总
|
||||||
|
receiptManageDO.setBillAmount(billAmount);
|
||||||
|
receiptManageDO.setBillAmountSettlement(billAmountSettlement);
|
||||||
|
receiptManageDO.setBillAmountUnsettled(billAmountUnsettled);
|
||||||
|
receiptManageDO.setCollectedAmount(collectedAmount);
|
||||||
|
receiptManageDO.setCollectedDiscount(collectedDiscount);
|
||||||
|
//剩余未收 = 未收金额 - 收款金额 - 优惠金额
|
||||||
|
receiptManageDO.setUncollectedAmount(billAmountUnsettled.subtract(collectedAmount).subtract(collectedDiscount));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 撤销收款
|
* 撤销收款
|
||||||
*/
|
*/
|
||||||
|
|||||||
Reference in New Issue
Block a user