feat: 确认收入的时候 判断不能大于当前项目的待确收金额
This commit is contained in:
+105
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user