到账开票
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
+10
-2
@@ -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>
|
||||
+145
-22
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
+8
-1
@@ -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;
|
||||
}
|
||||
//应收=实收
|
||||
|
||||
Reference in New Issue
Block a user