到账开票

This commit is contained in:
baozhipeng
2021-09-13 09:32:55 +08:00
parent 4933ad59cd
commit 4b223c50a4
4 changed files with 166 additions and 25 deletions
@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jero.mail.entity.PayMailBill;
import io.lettuce.core.dynamic.annotation.Param;
import java.math.BigDecimal;
import java.util.List;
/**
@@ -24,4 +25,6 @@ public interface PayMailBillMapper extends BaseMapper<PayMailBill> {
*/
List<PayMailBill> selectCommonProjectMailBillVO(@Param("projectId") String projectId);
// 开票总额
BigDecimal sumInvoiceAmount(@Param("projectId") String projectId);
}
@@ -15,7 +15,7 @@
<result property="postNo" column="post_no"></result>
<result property="liaisonMan" column="liaison_man"></result>
<result property="mobile" column="mobile"></result>
<result property="paymentDate" column="payment_date"></result>
<result property="billDate" column="bill_date"></result>
<result property="sendDate" column="send_date"></result>
<result property="remark" column="remark"></result>
<result property="projectName" column="project_name"></result>
@@ -34,11 +34,19 @@
pmb.post_no,
pmb.liaison_man,
pmb.mobile,
pmb.payment_date,
pmb.bill_date,
pmb.send_date,
pmb.remark,
pmb.project_name
FROM pay_mail_bill pmb
WHERE pmb.id IN (SELECT bill_id FROM pay_mail_bill_project WHERE project_id=#{projectId})
</select>
<!-- 开票总额-->
<select id="sumInvoiceAmount" resultType="Decimal">
select sum(b.invoice_amount)
from pay_mail_bill b
left join pay_mail_bill_project bp on b.id = bp.bill_id
where bp.project_id= #{projectId}
</select>
</mapper>
@@ -27,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@@ -53,20 +54,22 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
private PayMemberProjectSubitemMapper payMemberProjectSubitemMapper;
@Resource
private TbMemberProjectSubitemMapper tbMemberProjectSubitemMapper;
@Resource
private PayMailBillMapper payMailBillMapper;
@Override
public List<PayMailBill> selectMailBillVO(String projectId) {
if(StringUtils.isBlank(projectId)){
if (StringUtils.isBlank(projectId)) {
throw new JeroBootException("项目id不能为空!");
}
List<PayMailBill> list = new ArrayList<>();
LambdaQueryWrapper<PayMailBillProject> queryMailBillProject = new LambdaQueryWrapper<>();
queryMailBillProject.eq(PayMailBillProject::getProjectId,projectId);
queryMailBillProject.eq(PayMailBillProject::getProjectId, projectId);
List<PayMailBillProject> listPayMailBillProject = payMailBillProjectService.list();
if(!CollectionUtils.isEmpty(listPayMailBillProject)){
if (!CollectionUtils.isEmpty(listPayMailBillProject)) {
List<String> listBill = listPayMailBillProject.stream().map(PayMailBillProject::getBillId).collect(Collectors.toList());
LambdaQueryWrapper<PayMailBill> queryPayMailBill = new LambdaQueryWrapper<>();
queryPayMailBill.in(PayMailBill::getId,listBill);
queryPayMailBill.in(PayMailBill::getId, listBill);
list = payMailBillService.list(queryPayMailBill);
}
return list;
@@ -74,30 +77,31 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
/**
* 添加开票
*
* @param payMailBill
* @return
*/
public Result<?> addPayBill(PayMailBill payMailBill,String projectIds,String projectTypes){
public Result<?> addPayBill(PayMailBill payMailBill, String projectIds, String projectTypes) {
String[] projectIdArray = projectIds.split(",");
String[] projectTypeArray = projectTypes.split(",");
//校验不同项目是否属于同一个公司
String res=checkCompanyProject(projectIdArray,projectTypeArray);
if(!"success".equals(res)){
String res = checkCompanyProject(projectIdArray, projectTypeArray);
if (!"success".equals(res)) {
return Result.error(res);
}
for (int i = 0; i < projectIdArray.length; i++) {
if(PayIncomeContractCommon.PROJECT_TYPE5.equals(String.valueOf(projectIdArray[i]))){
if (PayIncomeContractCommon.PROJECT_TYPE5.equals(String.valueOf(projectIdArray[i]))) {
LambdaQueryWrapper<PayMailBillProject> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(PayMailBillProject::getProjectId, projectIdArray[i]);
wrapper.eq(PayMailBillProject::getProjectType, PayIncomeContractCommon.PROJECT_TYPE5);
List<PayMailBillProject> type5List = payMailBillProjectService.list(wrapper);
if(type5List!=null && type5List.size()>0){
if (type5List != null && type5List.size() > 0) {
return Result.error("标协会员项目,只能开票一次。");
}
}
@@ -106,20 +110,23 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//新增票据邮寄表
payMailBillService.save(payMailBill);
//新增票据关联项目表
for (int i = 0; i < projectTypeArray.length; i++) {
//新增票据关联项目表
PayMailBillProject payMailBillProject = new PayMailBillProject();
payMailBillProject.setBillId(payMailBill.getId());
payMailBillProject.setProjectId(projectIdArray[i]);
payMailBillProject.setProjectType(Integer.valueOf(projectTypeArray[i]));
payMailBillProjectService.save(payMailBillProject);
// 更新项目表开票状态
getMakeInvoice(projectIdArray[i],projectTypeArray[i]);
}
return Result.OK("添加成功!");
}
//校验不同项目是否属于同一个公司
private String checkCompanyProject(String[] projectIdArray,String[] projectTypeArray){
String standardCompanyId =null;//基准公司id
private String checkCompanyProject(String[] projectIdArray, String[] projectTypeArray) {
String standardCompanyId = null;//基准公司id
for (int i = 0; i < projectTypeArray.length; i++) {
@@ -129,10 +136,10 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject payCommonProject = payCommonProjectMapper.selectById(projectIdArray[i]);
//将第一个项目作为基准公司
if(i==0){
if (i == 0) {
standardCompanyId = payCommonProject.getChargeCompanyId();
}
if(!standardCompanyId.equals(payCommonProject.getChargeCompanyId())){
if (!standardCompanyId.equals(payCommonProject.getChargeCompanyId())) {
return "打包开票只能是同一个企业";
}
break;
@@ -140,10 +147,10 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem workingGroup = payWorkingGroupSubItemMapper.selectById(projectIdArray[i]);
//将第一个项目作为基准公司
if(i==0){
if (i == 0) {
standardCompanyId = workingGroup.getChargeCompanyId();
}
if(!standardCompanyId.equals(workingGroup.getChargeCompanyId())){
if (!standardCompanyId.equals(workingGroup.getChargeCompanyId())) {
return "打包开票只能是同一个企业";
}
break;
@@ -151,10 +158,10 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation meeting = payMeetingSituationMapper.selectById(projectIdArray[i]);
//将第一个项目作为基准公司
if(i==0){
if (i == 0) {
standardCompanyId = meeting.getCompanyId();
}
if(!standardCompanyId.equals(meeting.getCompanyId())){
if (!standardCompanyId.equals(meeting.getCompanyId())) {
return "打包开票只能是同一个企业";
}
break;
@@ -162,10 +169,10 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem memberProject = payMemberProjectSubitemMapper.selectById(projectIdArray[i]);
//将第一个项目作为基准公司
if(i==0){
if (i == 0) {
standardCompanyId = memberProject.getCompanyId();
}
if(!standardCompanyId.equals(memberProject.getCompanyId())){
if (!standardCompanyId.equals(memberProject.getCompanyId())) {
return "打包开票只能是同一个企业";
}
break;
@@ -173,10 +180,10 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
case PayIncomeContractCommon.PROJECT_TYPE5:
TbMemberProjectSubitem tbMemberProject = tbMemberProjectSubitemMapper.selectById(projectIdArray[i]);
//将第一个项目作为基准公司
if(i==0){
if (i == 0) {
standardCompanyId = tbMemberProject.getCompanyId();
}
if(!standardCompanyId.equals(tbMemberProject.getCompanyId())){
if (!standardCompanyId.equals(tbMemberProject.getCompanyId())) {
return "打包开票只能是同一个企业";
}
break;
@@ -186,4 +193,120 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
}
return "success";
}
/**
* 更新项目表开票状态
* @param projectId
* @param projectType
* @return
*/
private void getMakeInvoice(String projectId, String projectType) {
Integer makeInvoice=4;
BigDecimal amountReceivable=new BigDecimal("0");//应收金额
Integer needInvoice = 0;//是否需要发票
switch (projectType) {
// 普通项目
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject payCommonProject = payCommonProjectMapper.selectById(projectId);
amountReceivable = payCommonProject.getReceivableAmount();//应收
needInvoice = payCommonProject.getNeedInvoice();//是否需要发票
break;
// 工作组项目
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem workingGroup = payWorkingGroupSubItemMapper.selectById(projectId);
amountReceivable = workingGroup.getReceivableAmount();//应收
needInvoice = workingGroup.getNeedInvoice();//是否需要发票
break;
//会议项目
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation meeting = payMeetingSituationMapper.selectById(projectId);
amountReceivable = meeting.getAmountReceivable();//应收
needInvoice = meeting.getNeedInvoice();//是否需要发票
break;
//会员项目
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem memberProject = payMemberProjectSubitemMapper.selectById(projectId);
amountReceivable = memberProject.getAmountReceivable();//应收
needInvoice = memberProject.getNeedInvoice();//是否需要发票
break;
//标协会员
case PayIncomeContractCommon.PROJECT_TYPE5:
TbMemberProjectSubitem tbMemberProject = tbMemberProjectSubitemMapper.selectById(projectId);
amountReceivable = tbMemberProject.getAmountReceivable();//应收
needInvoice = tbMemberProject.getInvoiceRequirements();//是否需要发票
break;
default:
break;
}
// 开票总额
BigDecimal invoiceAmount = payMailBillMapper.sumInvoiceAmount(projectId);
if(invoiceAmount==null){
invoiceAmount =new BigDecimal("0");
}
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 (projectType) {
// 普通项目
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject newCommon = new PayCommonProject();
newCommon.setId(projectId);
newCommon.setMakeInvoice(makeInvoice);
payCommonProjectMapper.updateById(newCommon);
break;
// 工作组项目
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem newWorkingGroup = new PayWorkingGroupSubItem();
newWorkingGroup.setId(projectId);
newWorkingGroup.setMakeInvoice(makeInvoice);
payWorkingGroupSubItemMapper.updateById(newWorkingGroup);
break;
//会议项目
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation newMeeting = new PayMeetingSituation();
newMeeting.setId(projectId);
newMeeting.setMakeInvoice(makeInvoice);
payMeetingSituationMapper.updateById(newMeeting);
break;
//会员项目
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem newMemberProject = new PayMemberProjectSubitem();
newMemberProject.setId(projectId);
newMemberProject.setMakeInvoice(makeInvoice);
payMemberProjectSubitemMapper.updateById(newMemberProject);
break;
//标协会员
case PayIncomeContractCommon.PROJECT_TYPE5:
TbMemberProjectSubitem newTbMemberProject = new TbMemberProjectSubitem();
newTbMemberProject.setId(projectId);
newTbMemberProject.setMakeInvoice(makeInvoice);
tbMemberProjectSubitemMapper.updateById(newTbMemberProject);
break;
default:
break;
}
}
}
@@ -271,12 +271,19 @@ public class PayPaymentRecordServiceImpl extends ServiceImpl<PayPaymentRecordMap
*/
private Integer getInAccount(BigDecimal receivableAmount,BigDecimal paidAmount){
BigDecimal zero =new BigDecimal("0");
if(receivableAmount == null){
receivableAmount = new BigDecimal("0");
}
if(paidAmount == null){
paidAmount = new BigDecimal("0");
}
//应收=0
if(receivableAmount.compareTo(zero)==0){
return 3;
}
//应收>实收>0
if(receivableAmount.compareTo(paidAmount) == 1 && paidAmount!=null && paidAmount.compareTo(zero)==1){
if(receivableAmount.compareTo(paidAmount) == 1 && paidAmount.compareTo(zero)==1){
return 2;
}
//应收=实收