来款开票

This commit is contained in:
baozhipeng
2021-10-08 11:02:35 +08:00
parent 659f66b487
commit 532983fefa
8 changed files with 326 additions and 18 deletions
@@ -1,6 +1,8 @@
package com.jero.mail;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.jero.mail.entity.PayMailBill;
import com.jero.mail.entity.PayMailBillProject;
import io.swagger.annotations.ApiModelProperty;
@@ -21,4 +23,9 @@ public class PayMailBillVO extends PayMailBill {
*/
@TableField(exist = false)
List<PayMailBillProject> bmpList;
/**邮寄票据关联项目表id*/
@TableField(exist = false)
@ApiModelProperty(value = "bmpId")
private java.lang.String bmpId;
}
@@ -31,7 +31,7 @@ public interface PayMailBillMapper extends BaseMapper<PayMailBill> {
*/
List<PayMailBill> selectCommonProjectMailBillVO(@Param("projectId") String projectId);
List<PayMailBill> selectInvoicingStage(@Param("projectId")String projectId);
List<PayMailBillVO> selectInvoicingStage(@Param("projectId")String projectId);
/**
* @Description 查询月份邮寄数量
@@ -43,8 +43,8 @@
WHERE pmb.id IN (SELECT bill_id FROM pay_mail_bill_project WHERE project_id=#{projectId})
</select>
<select id="selectInvoicingStage" resultType="com.jero.mail.entity.PayMailBill">
select pmb.project_name,pmbp.invoice_amount,pmb.bill_no,pmb.bill_date,pmbp.remark
<select id="selectInvoicingStage" resultType="com.jero.mail.PayMailBillVO">
select pmb.id as id,pmbp.id as bmpId,pmb.project_name,pmbp.invoice_amount,pmb.bill_no,pmb.bill_date,pmbp.remark
from pay_mail_bill pmb
inner JOIN pay_mail_bill_project pmbp on pmb.id = pmbp.bill_id
where pmbp.project_id=#{projectId}
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import com.jero.common.api.vo.Result;
import com.jero.mail.PayMailBillVO;
import com.jero.mail.entity.PayMailBill;
import com.jero.payment.entity.PayPaymentRecord;
import java.util.List;
@@ -33,7 +34,7 @@ public interface IPayMailBillService extends IService<PayMailBill> {
* @param projectId
* @return
*/
List<PayMailBill> selectInvoicingStage(String projectId);
List<PayMailBillVO> selectInvoicingStage(String projectId);
/**
* 添加开票
@@ -42,6 +43,13 @@ public interface IPayMailBillService extends IService<PayMailBill> {
*/
Result<?> addPayBill(PayMailBillVO payMailBill);
/**
* 编辑开票
* @param payMailBillVo
* @return
*/
Result<?> editPayBill(PayMailBillVO payMailBillVo);
/**
* 推送邮寄数据到会员系统
* @param payMailBill
@@ -21,6 +21,7 @@ import com.jero.mail.entity.BillingInfo;
import com.jero.mail.entity.PayMailBill;
import com.jero.mail.entity.PayMailBillProject;
import com.jero.mail.mapper.PayMailBillMapper;
import com.jero.mail.mapper.PayMailBillProjectMapper;
import com.jero.mail.service.IPayMailBillProjectService;
import com.jero.mail.service.IPayMailBillService;
import com.jero.meeting.entity.PayMeeting;
@@ -35,6 +36,7 @@ import com.jero.member.mapper.PayMemberProjectMapper;
import com.jero.member.mapper.PayMemberProjectSubitemMapper;
import com.jero.member.mapper.TbMemberProjectMapper;
import com.jero.member.mapper.TbMemberProjectSubitemMapper;
import com.jero.payment.entity.PayPaymentRecord;
import com.jero.project.entity.PayCommonProject;
import com.jero.project.entity.PayWorkingGroup;
import com.jero.project.entity.PayWorkingGroupSubItem;
@@ -88,7 +90,7 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
@Resource
private PayMailBillMapper payMailBillMapper;
@Resource
private IPayContactsManagementService payContactsManagementService;
private PayMailBillProjectMapper payMailBillProjectMapper;
@Override
public List<PayMailBill> selectMailBillVO(String projectId) {
@@ -109,7 +111,7 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
}
@Override
public List<PayMailBill> selectInvoicingStage(String projectId) {
public List<PayMailBillVO> selectInvoicingStage(String projectId) {
return payMailBillMapper.selectInvoicingStage(projectId);
}
@@ -124,7 +126,7 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
//票据关联项目表
List<PayMailBillProject> bmpList = payMailBill.getBmpList();
//校验不同项目是否属于同一个公司
//校验不同项目是否属于同一个公司,开票金额是否大于当前欠未开票金额
String res = checkCompanyProject(bmpList);
if (!"success".equals(res)) {
return Result.error(res);
@@ -158,7 +160,7 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
for(int i=0; i<bmpList.size();i++){
getMakeInvoice(bmpList.get(i),
projectName,chargeCompanyName,principalName,principalId,
i,bmpList.size());
i);
}
payMailBill.setProjectName(projectName.toString());
payMailBill.setChargeCompanyName(chargeCompanyName.toString());
@@ -264,7 +266,7 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
}
//校验不同项目是否属于同一个公司
//校验不同项目是否属于同一个公司,开票金额是否大于当前欠未开票金额
private String checkCompanyProject(List<PayMailBillProject> bmpList) {
String standardCompanyId = null;//基准公司id
@@ -414,7 +416,7 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
*/
private void getMakeInvoice(PayMailBillProject payMailBillProject,
StringBuilder projectName,StringBuilder chargeCompanyName,StringBuilder principalName,StringBuilder principalId,
int i,int size) {
int i) {
int makeInvoice=4;
BigDecimal amountReceivable=new BigDecimal("0");//应收金额
Integer needInvoice = 0;//是否需要发票
@@ -628,4 +630,185 @@ public class PayMailBillServiceImpl extends ServiceImpl<PayMailBillMapper, PayMa
}
}
/**
*
* @param payMailBillVo 这里的开票金额invoiceAmount,其实是payMailBillProject里的开票金额
* @return
*/
public Result<?> editPayBill(PayMailBillVO payMailBillVo){
//查出没编辑之前的开票记录
PayMailBillProject oldBmp = payMailBillProjectMapper.selectById(payMailBillVo.getBmpId());
//校验开票金额是否大于当前欠未开票金额
String res = editCheckCompanyProject(payMailBillVo,oldBmp);
if (!"success".equals(res)) {
return Result.error(res);
}
//更新票据邮寄表
payMailBillMapper.updateById(payMailBillVo);
//更新票据关联项目表
PayMailBillProject payMailBillProject = new PayMailBillProject();
payMailBillProject.setId(payMailBillVo.getBmpId());
payMailBillProject.setInvoiceAmount(payMailBillVo.getInvoiceAmount());
payMailBillProject.setRemark(payMailBillVo.getRemark());
payMailBillProjectService.updateById(payMailBillProject);
return Result.OK("更新成功!");
}
//编辑时开票金额是否大于当前欠未开票金额
private String editCheckCompanyProject(PayMailBillVO bm,PayMailBillProject oldBmp) {
int makeInvoice=4;
BigDecimal amountReceivable=new BigDecimal("0");//应收金额
Integer needInvoice = 0;//是否需要发票
//之前开票总额-编辑之前的开票金额=原始开票总额
BigDecimal oldInvoiceAmount ;
//原始开票总额+本次开票金额
BigDecimal invoiceAmount=new BigDecimal("0");
switch (oldBmp.getProjectType().toString()) {
// 普通项目
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject payCommonProject = payCommonProjectMapper.selectById(oldBmp.getProjectId());
amountReceivable = payCommonProject.getReceivableAmount();//应收
needInvoice = payCommonProject.getNeedInvoice();//是否需要发票
//之前开票总额-编辑之前的开票金额
oldInvoiceAmount = payCommonProject.getInvoiceAmount().subtract(oldBmp.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
if(oldInvoiceAmount==null){
oldInvoiceAmount= new BigDecimal("0");
}
//原始开票总额+本次开票金额
invoiceAmount = oldInvoiceAmount.add(bm.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
//开票总额>应收
if(invoiceAmount.compareTo(payCommonProject.getReceivableAmount()) == 1){
return "开票金额大于当前欠未开票金额,输入有误!";
}
break;
// 工作组项目
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem workingGroup = payWorkingGroupSubItemMapper.selectById(oldBmp.getProjectId());
amountReceivable = workingGroup.getReceivableAmount();//应收
needInvoice = workingGroup.getNeedInvoice();//是否需要发票
//之前开票总额-编辑之前的开票金额
oldInvoiceAmount = workingGroup.getInvoiceAmount().subtract(oldBmp.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
if(oldInvoiceAmount==null){
oldInvoiceAmount= new BigDecimal("0");
}
//原始开票总额+本次开票金额
invoiceAmount = oldInvoiceAmount.add(bm.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
//开票总额>应收
if(invoiceAmount.compareTo(workingGroup.getReceivableAmount()) == 1){
return "开票金额大于当前欠未开票金额,输入有误!";
}
break;
//会议项目
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation meeting = payMeetingSituationMapper.selectById(oldBmp.getProjectId());
amountReceivable = meeting.getAmountReceivable();//应收
needInvoice = meeting.getNeedInvoice();//是否需要发票
//之前开票总额-编辑之前的开票金额
oldInvoiceAmount = meeting.getInvoiceAmount().subtract(oldBmp.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
if(oldInvoiceAmount==null){
oldInvoiceAmount= new BigDecimal("0");
}
//原始开票总额+本次开票金额
invoiceAmount = oldInvoiceAmount.add(bm.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
//开票总额>应收
if(invoiceAmount.compareTo(meeting.getAmountReceivable()) == 1){
return "开票金额大于当前欠未开票金额,输入有误!";
}
break;
//会员项目
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem memberProject = payMemberProjectSubitemMapper.selectById(oldBmp.getProjectId());
amountReceivable = memberProject.getAmountReceivable();//应收
needInvoice = memberProject.getNeedInvoice();//是否需要发票
//之前开票总额-编辑之前的开票金额
oldInvoiceAmount = memberProject.getInvoiceAmount().subtract(oldBmp.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
if(oldInvoiceAmount==null){
oldInvoiceAmount= new BigDecimal("0");
}
//原始开票总额+本次开票金额
invoiceAmount = oldInvoiceAmount.add(bm.getInvoiceAmount()).setScale(2, BigDecimal.ROUND_HALF_UP);
//开票总额>应收
if(invoiceAmount.compareTo(memberProject.getAmountReceivable()) == 1){
return "开票金额大于当前欠未开票金额,输入有误!";
}
break;
//标协会员
case PayIncomeContractCommon.PROJECT_TYPE5:
return "标协会员类型不可编辑!";
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 (oldBmp.getProjectType().toString()) {
// 普通项目
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject newCommon = new PayCommonProject();
newCommon.setId(oldBmp.getProjectId());
newCommon.setMakeInvoice(makeInvoice);
newCommon.setInvoiceAmount(invoiceAmount);
payCommonProjectMapper.updateById(newCommon);
break;
// 工作组项目
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem newWorkingGroup = new PayWorkingGroupSubItem();
newWorkingGroup.setId(oldBmp.getProjectId());
newWorkingGroup.setMakeInvoice(makeInvoice);
newWorkingGroup.setInvoiceAmount(invoiceAmount);
payWorkingGroupSubItemMapper.updateById(newWorkingGroup);
break;
//会议项目
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation newMeeting = new PayMeetingSituation();
newMeeting.setId(oldBmp.getProjectId());
newMeeting.setMakeInvoice(makeInvoice);
newMeeting.setInvoiceAmount(invoiceAmount);
payMeetingSituationMapper.updateById(newMeeting);
break;
//会员项目
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem newMemberProject = new PayMemberProjectSubitem();
newMemberProject.setId(oldBmp.getProjectId());
newMemberProject.setMakeInvoice(makeInvoice);
newMemberProject.setInvoiceAmount(invoiceAmount);
payMemberProjectSubitemMapper.updateById(newMemberProject);
break;
default:
break;
}
return "success";
}
}
@@ -134,7 +134,7 @@ public class PayPaymentRecordController extends JeroController<PayPaymentRecord,
@ApiOperation(value="编辑来款", notes="编辑来款")
@PostMapping(value = "/editAmountReceived")
public Result<?> editAmountReceived(@RequestBody PayPaymentRecord payPaymentRecord) {
payPaymentRecordService.updateById(payPaymentRecord);
payPaymentRecordService.editAmountReceived(payPaymentRecord);
return Result.OK("编辑成功!");
}
@@ -164,8 +164,8 @@ public class PayPaymentRecordController extends JeroController<PayPaymentRecord,
*/
@ApiOperation(value="编辑开票", notes="编辑开票")
@PostMapping(value = "/editPayBill")
public Result<?> editPayBill(@RequestBody PayMailBill payMailBill) {
payMailBillService.updateById(payMailBill);
public Result<?> editPayBill(@RequestBody PayMailBillVO payMailBillVo) {
payMailBillService.editPayBill(payMailBillVo);
return Result.OK("编辑成功!");
}
@@ -47,6 +47,11 @@ public interface IPayPaymentRecordService extends IService<PayPaymentRecord> {
*/
Result<?> standardsAddAR(String tbPaymentId,PayPaymentRecord payPaymentRecord);
/**
* 编辑来款
* @param payPaymentRecord
*/
void editAmountReceived(PayPaymentRecord payPaymentRecord);
/**
* 导出
* @param request
@@ -84,7 +84,6 @@ public class PayPaymentRecordServiceImpl extends ServiceImpl<PayPaymentRecordMap
/**
* 添加来款记录
*/
// @Transactional
@Override
public void addAmountReceived(List<PayPaymentRecord> list){
List<TbCheckVo> typr5List = new ArrayList<>();
@@ -92,10 +91,8 @@ public class PayPaymentRecordServiceImpl extends ServiceImpl<PayPaymentRecordMap
addOneAmountReceived(payPaymentRecord,typr5List);
}
//推送到会员端
if(typr5List !=null && typr5List.size()>0){
// HashMap<String, Object> paramMap = new HashMap<>();
// paramMap.put("voList",typr5List);
AuthenticationUtils.post("/paymentInfo/incomingPaymentCheck",null,typr5List);
}
}
@@ -322,7 +319,7 @@ public class PayPaymentRecordServiceImpl extends ServiceImpl<PayPaymentRecordMap
paidAmount = new BigDecimal("0");
}
//欠款
BigDecimal debt = receivableAmount.subtract(paidAmount);
BigDecimal debt = receivableAmount.subtract(paidAmount).setScale(2, BigDecimal.ROUND_HALF_UP);
if(amountReceived.compareTo(debt) == 1){
//本次到账金额大于欠款
@@ -382,6 +379,114 @@ public class PayPaymentRecordServiceImpl extends ServiceImpl<PayPaymentRecordMap
}
/**
* 编辑来款
* @param payPaymentRecord
*/
@Override
public void editAmountReceived(PayPaymentRecord payPaymentRecord){
//查出没编辑之前的来款记录
PayPaymentRecord oldRecord = payPaymentRecordMapper.selectById(payPaymentRecord);
BigDecimal receivableAmount;
Boolean isAdd;
BigDecimal newPaidAmount;
BigDecimal paidAmount;
Integer inAccount;
switch (String.valueOf(payPaymentRecord.getProjectType())){
// 普通项目
case PayIncomeContractCommon.PROJECT_TYPE1:
PayCommonProject payCommonProject = payCommonProjectMapper.selectById(payPaymentRecord.getProjectId());
receivableAmount = payCommonProject.getReceivableAmount();//应收
paidAmount=payCommonProject.getPaidAmount().subtract(oldRecord.getAmountReceived()).setScale(2, BigDecimal.ROUND_HALF_UP);//实收-上次来款
//是否还能再添加来款
isAdd = isAdd(receivableAmount,paidAmount, payPaymentRecord.getAmountReceived());
if(isAdd){
newPaidAmount =addPaidAmount(paidAmount,payPaymentRecord.getAmountReceived());//累加实收
inAccount = getInAccount(receivableAmount, newPaidAmount);//到账状态
//更新主列表
payCommonProject.setPaidAmount(newPaidAmount);
payCommonProject.setInAccount(inAccount);
payCommonProjectMapper.updateById(payCommonProject);
}else{
throw new JeroBootException("到账金额大于当前欠款金额,不可提交!");
}
break;
// 工作组项目
case PayIncomeContractCommon.PROJECT_TYPE2:
PayWorkingGroupSubItem payWorking = payWorkingGroupSubItemMapper.selectById(payPaymentRecord.getProjectId());
receivableAmount = payWorking.getReceivableAmount();//应收
paidAmount=payWorking.getPaidAmount().subtract(oldRecord.getAmountReceived()).setScale(2, BigDecimal.ROUND_HALF_UP);//实收-上次来款
//是否还能再添加来款
isAdd = isAdd(receivableAmount,paidAmount, payPaymentRecord.getAmountReceived());
if(isAdd){
newPaidAmount =addPaidAmount(paidAmount,payPaymentRecord.getAmountReceived());//累加实收
inAccount = getInAccount(receivableAmount, newPaidAmount);//到账状态
//更新主列表
payWorking.setPaidAmount(newPaidAmount);
payWorking.setInAccount(inAccount);
payWorkingGroupSubItemMapper.updateById(payWorking);
}else{
throw new JeroBootException("到账金额大于当前欠款金额,不可提交!");
}
break;
//会议项目
case PayIncomeContractCommon.PROJECT_TYPE3:
PayMeetingSituation meeting = payMeetingSituationMapper.selectById(payPaymentRecord.getProjectId());
receivableAmount = meeting.getAmountReceivable();//应收
paidAmount=meeting.getPaidAmount().subtract(oldRecord.getAmountReceived()).setScale(2, BigDecimal.ROUND_HALF_UP);//实收-上次来款
//是否还能再添加来款
isAdd = isAdd(receivableAmount,paidAmount, payPaymentRecord.getAmountReceived());
if(isAdd){
newPaidAmount =addPaidAmount(paidAmount,payPaymentRecord.getAmountReceived());//累加实收
inAccount = getInAccount(receivableAmount, newPaidAmount);//到账状态
//更新主列表
meeting.setPaidAmount(newPaidAmount);
meeting.setInAccount(inAccount);
payMeetingSituationMapper.updateById(meeting);
}else{
throw new JeroBootException("到账金额大于当前欠款金额,不可提交!");
}
break;
//会员项目
case PayIncomeContractCommon.PROJECT_TYPE4:
PayMemberProjectSubitem member = payMemberProjectSubitemMapper.selectById(payPaymentRecord.getProjectId());
receivableAmount = member.getAmountReceivable();//应收
paidAmount=member.getPaidAmount().subtract(oldRecord.getAmountReceived()).setScale(2, BigDecimal.ROUND_HALF_UP);//实收-上次来款
//是否还能再添加来款
isAdd = isAdd(receivableAmount, paidAmount,payPaymentRecord.getAmountReceived());
if(isAdd){
newPaidAmount =addPaidAmount(paidAmount,payPaymentRecord.getAmountReceived());//累加实收
inAccount = getInAccount(receivableAmount, newPaidAmount);//到账状态
//更新主列表
member.setPaidAmount(newPaidAmount);
member.setInAccount(inAccount);
payMemberProjectSubitemMapper.updateById(member);
}else{
throw new JeroBootException("到账金额大于当前欠款金额,不可提交!");
}
break;
//标协会员
case PayIncomeContractCommon.PROJECT_TYPE5:
throw new JeroBootException("标协会员类型不可编辑!");
default:break;
}
payPaymentRecordMapper.updateById(payPaymentRecord);
}
/**
* 导出
* @param request