diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PayMailBillServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PayMailBillServiceImpl.java index e7dc3035..fe4c186c 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PayMailBillServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/mail/service/impl/PayMailBillServiceImpl.java @@ -25,7 +25,6 @@ import com.jero.company.service.IPayCompanyManagementService; import com.jero.company.service.IPayContactsManagementService; import com.jero.config.StaticConfig; import com.jero.contract.common.PayIncomeContractCommon; -import com.jero.mail.commont.constant; import com.jero.mail.entity.BillingInfo; import com.jero.mail.entity.PayMailBill; import com.jero.mail.entity.PayMailBillProject; @@ -64,7 +63,6 @@ import com.jero.temporary.entity.PayContactsManagementTemporary; import com.jero.temporary.service.IPayCompanyManagementTemporaryService; import com.jero.temporary.service.IPayContactsManagementTemporaryService; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.lang3.ObjectUtils; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.springframework.beans.BeanUtils; @@ -646,150 +644,160 @@ public class PayMailBillServiceImpl extends ServiceImpl queryPayMailBillProject = new LambdaQueryWrapper<>(); - queryPayMailBillProject.eq(PayMailBillProject::getBillId,id); - List list1 = payMailBillProjectService.list(queryPayMailBillProject); - for(PayMailBillProject one:list1) { - if (ObjectUtils.isNotEmpty(one)) { - LambdaQueryWrapper queryPayMailBillProjectTwo = new LambdaQueryWrapper<>(); - queryPayMailBillProjectTwo.eq(PayMailBillProject::getProjectId, one.getProjectId()); - List listPayMailBillProject = payMailBillProjectService.list(queryPayMailBillProjectTwo); + public void updateProjectInfo(PayMailBillProject payMailBillProject){ + int makeInvoice=4; + BigDecimal amountReceivable = new BigDecimal("0");//待确收金额 + Integer needInvoice = 0;//是否需要发票 + BigDecimal invoiceAmount = payMailBillProject.getInvoiceAmount(); + if(Objects.isNull(invoiceAmount)){ + invoiceAmount = new BigDecimal("0");//本次开票金额 + } + BigDecimal oldInvoiceAmount;//开票金额 + BigDecimal noTaxAmount = payMailBillProject.getNoTaxAmount(); + BigDecimal tax = payMailBillProject.getTax(); + if (noTaxAmount == null || tax == null){ + noTaxAmount = invoiceAmount.divide(StaticConfig.TAX_RATE_CALCULATE, 2, RoundingMode.HALF_UP); + tax = invoiceAmount.subtract(noTaxAmount); + } + switch (payMailBillProject.getProjectType().toString()) { - // 开票金额 - BigDecimal invoice = new BigDecimal("0.00"); - // 开票次数 - int c = listPayMailBillProject.size(); - // 邮寄次数 - int y = 0; - if (!CollectionUtils.isEmpty(listPayMailBillProject)) { - BigDecimal b = listPayMailBillProject.stream().map(PayMailBillProject::getInvoiceAmount).reduce(BigDecimal.ZERO, BigDecimal::add); - invoice = invoice.add(b); - List list = listPayMailBillProject.stream().map(PayMailBillProject::getBillId).collect(Collectors.toList()); - LambdaQueryWrapper queryPayMailBill = new LambdaQueryWrapper<>(); - queryPayMailBill.in(PayMailBill::getId, list); - queryPayMailBill.eq(PayMailBill::getPostStatus, ProjectCommon.POST_STATUS1); - List listPayMailBill = payMailBillService.list(queryPayMailBill); - y = listPayMailBill.size(); + // 普通项目 + case PayIncomeContractCommon.PROJECT_TYPE1: + PayCommonProject payCommonProject = payCommonProjectMapper.selectById(payMailBillProject.getProjectId()); + amountReceivable = payCommonProject.getReceivableAmount();//应收 + needInvoice = payCommonProject.getNeedInvoice();//是否需要发票 + oldInvoiceAmount = payCommonProject.getInvoiceAmount(); + if(oldInvoiceAmount==null){ + oldInvoiceAmount= new BigDecimal("0"); } - //获取项目待确收金额 - BigDecimal receivableAmount; - - List listId = new ArrayList<>(); - //判断变更那个项目的邮寄状态 - if (GlobalConstants.ONE.equals(one.getProjectType())) { - PayCommonProject payCommonProjectOld = payCommonProjectService.getById(one.getProjectId()); - if (Objects.isNull(payCommonProjectOld)) { - throw new JeroBootException("项目不存在!"); - } - PayContactsManagementTemporary payCommonProjectTemporary = payContactsManagementTemporaryService.getById(payCommonProjectOld.getContactsTemporaryId()); - if (!Objects.isNull(payCommonProjectTemporary)) { - listId.add(payCommonProjectTemporary); - } - - receivableAmount = payCommonProjectOld.getReceivableAmount(); - PayCommonProject payCommonProject = new PayCommonProject(); - if (receivableAmount.compareTo(invoice) == 0 && c == y) { - payCommonProject.setId(one.getProjectId()); - payCommonProject.setMail(constant.ONE); - payCommonProjectService.updateById(payCommonProject); - } else if (y <= c && y > 0) { - payCommonProject.setId(one.getProjectId()); - payCommonProject.setMail(constant.TWO); - payCommonProjectService.updateById(payCommonProject); - } - } else if (GlobalConstants.TWO.equals(one.getProjectType())) { - PayWorkingGroupSubItem payWorkingGroupSubItemOld = payWorkingGroupSubItemService.getById(one.getProjectId()); - if (Objects.isNull(payWorkingGroupSubItemOld)) { - throw new JeroBootException("项目不存在!"); - } - PayWorkingGroup payWorkingGroup = payWorkingGroupService.getById(payWorkingGroupSubItemOld.getWorkingGroupId()); - if (Objects.isNull(payWorkingGroup)) { - throw new JeroBootException("工作组不存在!"); - } - List subItemContacts = payWorkingGroupSubItemContactsMapper.getSubItemContacts(one.getProjectId()); - for (PayWorkingGroupSubItemContacts subItemContact : subItemContacts) { - PayContactsManagementTemporary payWorkingTemporary = payContactsManagementTemporaryService.getById(subItemContact.getContactsTemporaryId()); - if (!Objects.isNull(payWorkingTemporary)) { - listId.add(payWorkingTemporary); - } - } - - - receivableAmount = payWorkingGroupSubItemOld.getReceivableAmount(); - PayWorkingGroupSubItem payWorkingGroupSubItem = new PayWorkingGroupSubItem(); - if (receivableAmount.compareTo(invoice) == 0 && c == y) { - payWorkingGroupSubItem.setId(one.getProjectId()); - payWorkingGroupSubItem.setMail(constant.ONE); - payWorkingGroupSubItemService.updateById(payWorkingGroupSubItem); - } else if (y <= c && y > 0) { - payWorkingGroupSubItem.setId(one.getProjectId()); - payWorkingGroupSubItem.setMail(constant.TWO); - payWorkingGroupSubItemService.updateById(payWorkingGroupSubItem); - } - } else if (GlobalConstants.THREE.equals(one.getProjectType())) { - PayMeetingSituation meetingPayContactsManagementOld = payMeetingSituationService.getById(one.getProjectId()); - if (Objects.isNull(meetingPayContactsManagementOld)) { - throw new JeroBootException("项目不存在!"); - } - PayMeeting payMeeting = payMeetingService.getById(meetingPayContactsManagementOld.getMeetingId()); - if (Objects.isNull(payMeeting)) { - throw new JeroBootException("会议不存在!"); - } - PayContactsManagement meetingPayContactsManagement = payContactsManagementService.getById(meetingPayContactsManagementOld.getContractId()); - if (!Objects.isNull(meetingPayContactsManagement)) { - String str = JSON.toJSONString(meetingPayContactsManagement); - PayContactsManagementTemporary meetingTemporary = JSONObject.parseObject(str, PayContactsManagementTemporary.class); - listId.add(meetingTemporary); - } - - receivableAmount = meetingPayContactsManagementOld.getAmountReceivable(); - PayMeetingSituation payMeetingSituation = new PayMeetingSituation(); - if (receivableAmount.compareTo(invoice) == 0 && c == y) { - payMeetingSituation.setId(one.getProjectId()); - payMeetingSituation.setMail(constant.ONE); - payMeetingSituationService.updateById(payMeetingSituation); - } else if (y <= c && y > 0) { - payMeetingSituation.setId(one.getProjectId()); - payMeetingSituation.setMail(constant.TWO); - payMeetingSituationService.updateById(payMeetingSituation); - } - } else if (GlobalConstants.FORE.equals(one.getProjectType())) { - PayMemberProjectSubitem payMemberProjectSubitemOld = payMemberProjectSubitemService.getById(one.getProjectId()); - if (Objects.isNull(payMemberProjectSubitemOld)) { - throw new JeroBootException("项目不存在!"); - } - PayMemberProject payMemberProject = memberProjectService.getById(payMemberProjectSubitemOld.getProjectId()); - if (Objects.isNull(payMemberProject)) { - throw new JeroBootException("会员项目不存在!"); - } - PayContactsManagementTemporary memberTemporary = payContactsManagementTemporaryService.getById(payMemberProjectSubitemOld.getCompanyContactTemporaryId()); - if (!Objects.isNull(memberTemporary)) { - listId.add(memberTemporary); - } - - receivableAmount = payMemberProjectSubitemOld.getAmountReceivable(); - PayMemberProjectSubitem payMemberProjectSubitem = new PayMemberProjectSubitem(); - if (receivableAmount.compareTo(invoice) == 0 && c == y) { - payMemberProjectSubitem.setId(one.getProjectId()); - payMemberProjectSubitem.setMail(constant.ONE); - payMemberProjectSubitemService.updateById(payMemberProjectSubitem); - } else if (y <= c && y > 0) { - payMemberProjectSubitem.setId(one.getProjectId()); - payMemberProjectSubitem.setMail(constant.TWO); - payMemberProjectSubitemService.updateById(payMemberProjectSubitem); - } + //之前开票总额+本次开票金额 + invoiceAmount = oldInvoiceAmount.subtract(invoiceAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + //税额 + noTaxAmount = payPaymentRecordService.subtractPaidAmount(noTaxAmount,payCommonProject.getInvoiceNoTaxAmount()); + tax = payPaymentRecordService.subtractPaidAmount(tax,payCommonProject.getInvoiceTax()); + break; + // 工作组项目 + case PayIncomeContractCommon.PROJECT_TYPE2: + PayWorkingGroupSubItem workingGroup = payWorkingGroupSubItemMapper.selectById(payMailBillProject.getProjectId()); + amountReceivable = workingGroup.getReceivableAmount();//应收 + needInvoice = workingGroup.getNeedInvoice();//是否需要发票 + oldInvoiceAmount = workingGroup.getInvoiceAmount(); + if(oldInvoiceAmount==null){ + oldInvoiceAmount= new BigDecimal("0"); } - } + //之前开票总额+本次开票金额 + invoiceAmount = oldInvoiceAmount.subtract(invoiceAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + //税额 + noTaxAmount = payPaymentRecordService.subtractPaidAmount(noTaxAmount,workingGroup.getInvoiceNoTaxAmount()); + tax = payPaymentRecordService.subtractPaidAmount(tax,workingGroup.getInvoiceTax()); + break; + //会议项目 + case PayIncomeContractCommon.PROJECT_TYPE3: + PayMeetingSituation meeting = payMeetingSituationMapper.selectById(payMailBillProject.getProjectId()); + amountReceivable = meeting.getAmountReceivable();//应收 + needInvoice = meeting.getNeedInvoice();//是否需要发票 + oldInvoiceAmount = meeting.getInvoiceAmount(); + if(oldInvoiceAmount==null){ + oldInvoiceAmount= new BigDecimal("0"); + } + //之前开票总额+本次开票金额 + invoiceAmount = oldInvoiceAmount.subtract(invoiceAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + //税额 + noTaxAmount = payPaymentRecordService.subtractPaidAmount(noTaxAmount,meeting.getInvoiceNoTaxAmount()); + tax = payPaymentRecordService.subtractPaidAmount(tax,meeting.getInvoiceTax()); + break; + //会员项目 + case PayIncomeContractCommon.PROJECT_TYPE4: + PayMemberProjectSubitem memberProject = payMemberProjectSubitemMapper.selectById(payMailBillProject.getProjectId()); + amountReceivable = memberProject.getAmountReceivable();//应收 + needInvoice = memberProject.getNeedInvoice();//是否需要发票 + oldInvoiceAmount = memberProject.getInvoiceAmount(); + if(oldInvoiceAmount==null){ + oldInvoiceAmount= new BigDecimal("0"); + } + //之前开票总额+本次开票金额 + invoiceAmount = oldInvoiceAmount.subtract(invoiceAmount).setScale(2, BigDecimal.ROUND_HALF_UP); + //税额 + noTaxAmount = payPaymentRecordService.subtractPaidAmount(noTaxAmount,memberProject.getInvoiceNoTaxAmount()); + tax = payPaymentRecordService.subtractPaidAmount(tax,memberProject.getInvoiceTax()); + break; + default: + break; + } + + if(amountReceivable==null){ + amountReceivable =new BigDecimal("0"); + } + + BigDecimal zero =new BigDecimal("0"); + + //应收=0 || 不需要开票 + if(amountReceivable.compareTo(zero)==0 || needInvoice.equals(0)){ + makeInvoice= 3; + } + //应收>开票总额 && 开票总额!=0 + if(amountReceivable.compareTo(invoiceAmount) == 1 && !(invoiceAmount.compareTo(zero) == 0)){ + makeInvoice= 2; + } + //开票总额>=应收 + if(invoiceAmount.compareTo(amountReceivable) > -1){ + makeInvoice= 1; + } + //开票总额为0 + if(invoiceAmount.compareTo(zero)==0){ + makeInvoice= 0; + } + + //更新项目表开票状态 + switch (payMailBillProject.getProjectType().toString()) { + // 普通项目 + case PayIncomeContractCommon.PROJECT_TYPE1: + PayCommonProject newCommon = new PayCommonProject(); + newCommon.setId(payMailBillProject.getProjectId()); + newCommon.setMakeInvoice(makeInvoice); + newCommon.setInvoiceAmount(invoiceAmount); + newCommon.setInvoiceNoTaxAmount(noTaxAmount); + newCommon.setInvoiceTax(tax); + payCommonProjectMapper.updateById(newCommon); + break; + // 工作组项目 + case PayIncomeContractCommon.PROJECT_TYPE2: + PayWorkingGroupSubItem newWorkingGroup = new PayWorkingGroupSubItem(); + newWorkingGroup.setId(payMailBillProject.getProjectId()); + newWorkingGroup.setMakeInvoice(makeInvoice); + newWorkingGroup.setInvoiceAmount(invoiceAmount); + newWorkingGroup.setInvoiceNoTaxAmount(noTaxAmount); + newWorkingGroup.setInvoiceTax(tax); + payWorkingGroupSubItemMapper.updateById(newWorkingGroup); + break; + //会议项目 + case PayIncomeContractCommon.PROJECT_TYPE3: + PayMeetingSituation newMeeting = new PayMeetingSituation(); + newMeeting.setId(payMailBillProject.getProjectId()); + newMeeting.setMakeInvoice(makeInvoice); + newMeeting.setInvoiceAmount(invoiceAmount); + newMeeting.setInvoiceNoTaxAmount(noTaxAmount); + newMeeting.setInvoiceTax(tax); + payMeetingSituationMapper.updateById(newMeeting); + break; + //会员项目 + case PayIncomeContractCommon.PROJECT_TYPE4: + PayMemberProjectSubitem newMemberProject = new PayMemberProjectSubitem(); + newMemberProject.setId(payMailBillProject.getProjectId()); + newMemberProject.setMakeInvoice(makeInvoice); + newMemberProject.setInvoiceAmount(invoiceAmount); + newMemberProject.setInvoiceNoTaxAmount(noTaxAmount); + newMemberProject.setInvoiceTax(tax); + payMemberProjectSubitemMapper.updateById(newMemberProject); + break; + default: + break; } } diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/payment/controller/PayConfirmPaymentRecordController.java b/jero-boot-incoming-payment/src/main/java/com/jero/payment/controller/PayConfirmPaymentRecordController.java index 258959a9..c0f600c8 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/payment/controller/PayConfirmPaymentRecordController.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/payment/controller/PayConfirmPaymentRecordController.java @@ -153,7 +153,7 @@ public class PayConfirmPaymentRecordController extends JeroController backInvoice(@RequestParam String id) { payMailBillService.backInvoice(id); return Result.OK(); diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/IPayPaymentRecordService.java b/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/IPayPaymentRecordService.java index 80d6a54f..49c3a59a 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/IPayPaymentRecordService.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/IPayPaymentRecordService.java @@ -81,6 +81,14 @@ public interface IPayPaymentRecordService extends IService { * @return */ BigDecimal addPaidAmount(BigDecimal paidAmount,BigDecimal amountReceived); + + /** + * 减去实收并四舍五入 + * @param paidAmount 实收 + * @param amountReceived 到账 + * @return + */ + BigDecimal subtractPaidAmount(BigDecimal paidAmount,BigDecimal amountReceived); /** * 得到到账状态 * @param receivableAmount 应收 diff --git a/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/impl/PayPaymentRecordServiceImpl.java b/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/impl/PayPaymentRecordServiceImpl.java index ecd866dd..ff91cac4 100644 --- a/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/impl/PayPaymentRecordServiceImpl.java +++ b/jero-boot-incoming-payment/src/main/java/com/jero/payment/service/impl/PayPaymentRecordServiceImpl.java @@ -1,7 +1,6 @@ package com.jero.payment.service.impl; import cn.hutool.core.collection.CollStreamUtil; -import com.alibaba.druid.sql.visitor.functions.If; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -78,7 +77,6 @@ import org.springframework.web.servlet.ModelAndView; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; -import javax.validation.constraints.DecimalMax; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; @@ -881,6 +879,24 @@ public class PayPaymentRecordServiceImpl extends ServiceImpl