feat: 确认收入的时候 判断不能大于当前项目的待确收金额

This commit is contained in:
2024-03-04 18:04:05 +08:00
parent 8191c61f50
commit 652715775a
@@ -62,6 +62,8 @@ public class PayConfirmPaymentRecordService extends ServiceImpl<PayConfirmPaymen
public void add(PayConfirmPaymentRecord payConfirmPaymentRecord) {
// 校验开票金额是否大于当前未开票金额
this.checkInvoiceAmount(payConfirmPaymentRecord);
//如果没有填写税额就存入默认税额
BigDecimal noTaxAmount = payConfirmPaymentRecord.getNoTaxAmount();
BigDecimal tax = payConfirmPaymentRecord.getTax();
@@ -77,6 +79,109 @@ public class PayConfirmPaymentRecordService extends ServiceImpl<PayConfirmPaymen
updateConfirmAmount(payConfirmPaymentRecord);
}
/**
* 校验开票金额是否大于当前未开票金额
*
* @param payConfirmPaymentRecord 确认来款记录
*/
private void checkInvoiceAmount(PayConfirmPaymentRecord payConfirmPaymentRecord) {
// 获取当前项目待确认金额
String projectId = payConfirmPaymentRecord.getProjectId();
String projectType = payConfirmPaymentRecord.getProjectType();
// 待确收金额
BigDecimal receivableAmount;
// 当前记录的确认金额
BigDecimal confirmAmount = payConfirmPaymentRecord.getAmountReceived();
// 获取所有确认金额
LambdaQueryWrapper<PayConfirmPaymentRecord> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayConfirmPaymentRecord::getProjectId, projectId);
List<PayConfirmPaymentRecord> list = this.list(queryWrapper);
BigDecimal totalAmount = list.stream().map(PayConfirmPaymentRecord::getAmountReceived)
.reduce(BigDecimal.ZERO, BigDecimal::add);
switch (projectType) {
// 普通项目
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject payCommonProject = payCommonProjectMapper.selectById(projectId);
if (payCommonProject == null) {
throw new JeroBootException("项目不存在");
}
// 获取待确收金额
receivableAmount = payCommonProject.getReceivableAmount();
// 如果当前确认金额不能大于当前项目的待确收金额
if (confirmAmount.compareTo(receivableAmount.subtract(totalAmount)) > 0) {
throw new JeroBootException("确收金额不能大于待确收金额");
}
break;
// 工作组项目
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem payWorking = payWorkingGroupSubItemMapper.selectById(projectId);
if (payWorking == null) {
break;
}
// 获取待确收金额
receivableAmount = payWorking.getReceivableAmount();
// 如果当前确认金额不能大于当前项目的待确收金额
if (confirmAmount.compareTo(receivableAmount.subtract(totalAmount)) > 0) {
throw new JeroBootException("确收金额不能大于待确收金额");
}
break;
//会议项目
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation meeting = payMeetingSituationMapper.selectById(projectId);
if (meeting == null) {
break;
}
// 获取待确收金额
receivableAmount = meeting.getAmountReceivable();
// 如果当前确认金额不能大于当前项目的待确收金额
if (confirmAmount.compareTo(receivableAmount.subtract(totalAmount)) > 0) {
throw new JeroBootException("确收金额不能大于待确收金额");
}
break;
//会员项目
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem member = payMemberProjectSubitemMapper.selectById(projectId);
if (member == null) {
break;
}
// 获取待确收金额
receivableAmount = member.getAmountReceivable();
// 如果当前确认金额不能大于当前项目的待确收金额
if (confirmAmount.compareTo(receivableAmount.subtract(totalAmount)) > 0) {
throw new JeroBootException("确收金额不能大于待确收金额");
}
break;
//标协会员
case PayIncomeContractCommon.PROJECT_TYPE5:
TbMemberProjectSubitem tbMember = tbMemberProjectSubitemMapper.selectById(projectId);
if (tbMember == null) {
break;
}
// 获取待确收金额
receivableAmount = tbMember.getAmountReceivable();
// 如果当前确认金额不能大于当前项目的待确收金额
if (confirmAmount.compareTo(receivableAmount.subtract(totalAmount)) > 0) {
throw new JeroBootException("确收金额不能大于待确收金额");
}
break;
//标协证书
case PayIncomeContractCommon.PROJECT_TYPE6:
TbCertificatePayment tbMemberCertificate = certificatePaymentMapper.selectById(projectId);
if (tbMemberCertificate == null) {
break;
}
// 获取待确收金额
receivableAmount = tbMemberCertificate.getAmountReceivable();
// 如果当前确认金额不能大于当前项目的待确收金额
if (confirmAmount.compareTo(receivableAmount.subtract(totalAmount)) > 0) {
throw new JeroBootException("确收金额不能大于待确收金额");
}
break;
default:
break;
}
}
private void updateConfirmAmount(PayConfirmPaymentRecord payConfirmPaymentRecord) {
String projectId = payConfirmPaymentRecord.getProjectId();
String projectType = payConfirmPaymentRecord.getProjectType();