通用项目详情完善

This commit is contained in:
梁琦涛
2021-09-15 10:35:42 +08:00
parent 1f2ae5932e
commit 86d2075381
9 changed files with 251 additions and 8 deletions
@@ -37,4 +37,62 @@ public class ProjectCommon {
* 来源(1:收入合同,2:打包管理)
*/
public final static Integer COME2 = 2;
/**
* 到账(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
public final static Integer IN_ACCOUNT0 = 0;
/**
* 到账(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
public final static Integer IN_ACCOUNT1 = 1;
/**
* 到账(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
public final static Integer IN_ACCOUNT2 = 2;
/**
* 开票(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
public final static Integer MAKE_INVOICE0 = 0;
/**
* 开票(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
public final static Integer MAKE_INVOICE1 = 1;
/**
* 开票(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
public final static Integer MAKE_INVOICE2 = 2;
/**
* 邮寄((1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志)))
*/
public final static Integer MAIL0 = 0;
/**
* 邮寄((1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志)))
*/
public final static Integer MAIL1 = 1;
/**
* 邮寄((1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志)))
*/
public final static Integer MAIL2 = 2;
/**
* 需要发票(1:增值税普通发票,2:增值税专用发票,0:否)
*/
public final static Integer NEED_INVOICE0 = 0;
/**
* 需要发票(1:增值税普通发票,2:增值税专用发票,0:否)
*/
public final static Integer NEED_INVOICE1 = 1;
/**
* 需要发票(1:增值税普通发票,2:增值税专用发票,0:否)
*/
public final static Integer NEED_INVOICE2 = 2;
/**
* 邮寄状态(0:未邮寄,1:已邮寄)
*/
public final static Integer POST_STATUS0 = 0;
/**
* 邮寄状态(0:未邮寄,1:已邮寄)
*/
public final static Integer POST_STATUS1 = 1;
}
@@ -15,7 +15,7 @@
UNION ALL
select gsub.id,g.working_group_project, gsub.charge_use, g.principal_id_a,g.principal_name_a,gsub.contacts_temporary_id_one,gsub.contacts_temporary_name_one,gsub.charge_company_temporary_name,gsub.receivable_amount,gsub.paid_amount,gsub.need_invoice,gsub.pack,gsub.in_account,gsub.make_invoice,gsub.mail,gsub.create_time,2,'','',gsub.remarks,gsub.contract_num,gsub.charge_company_temporary_id,gsub.charge_way
from pay_working_group g
inner join pay_working_group_subitem gsub on g.id = gsub.charge_company_id
inner join pay_working_group_subitem gsub on g.id = gsub.working_group_id
<where>
<if test="projectId != null and projectId != ''">
AND gsub.id = #{projectId}
@@ -1,6 +1,9 @@
package com.jero.common.service;
import com.jero.common.vo.ProjectDetailVO;
import com.jero.common.vo.ProjectStatusVO;
import java.math.BigDecimal;
public interface ProjectDetailService {
@@ -13,4 +16,14 @@ public interface ProjectDetailService {
* @Exception
*/
ProjectDetailVO getProjectDetail(String projectId);
/**
* @Description 获取变更应收金额之后的状态
* @Author lqt
* @Date 2021/9/14
* @Param
* @Return
* @Exception
*/
ProjectStatusVO getStatus(String projectId, BigDecimal receivableAmount);
}
@@ -8,6 +8,7 @@ import com.jero.common.service.ProjectDetailService;
import com.jero.common.system.api.ISysBaseAPI;
import com.jero.common.util.PasswordUtil;
import com.jero.common.vo.ProjectDetailVO;
import com.jero.common.vo.ProjectStatusVO;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayCompanyManagementService;
@@ -17,6 +18,8 @@ import com.jero.contract.entity.PayIncomeContractAssociated;
import com.jero.contract.service.IPayIncomeContractAssociatedService;
import com.jero.contract.service.IPayIncomeContractService;
import com.jero.mail.entity.PayMailBill;
import com.jero.mail.entity.PayMailBillProject;
import com.jero.mail.service.IPayMailBillProjectService;
import com.jero.mail.service.IPayMailBillService;
import com.jero.payment.entity.PayPaymentRecord;
import com.jero.payment.service.IPayPaymentRecordService;
@@ -31,8 +34,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
@Service
public class ProjectDetailServiceImpl implements ProjectDetailService {
@@ -57,6 +62,8 @@ public class ProjectDetailServiceImpl implements ProjectDetailService {
private IPayIncomeContractService payIncomeContractService;
@Autowired
private IPayIncomeContractAssociatedService payIncomeContractAssociatedService;
@Autowired
private IPayMailBillProjectService payMailBillProjectService;
@Override
public ProjectDetailVO getProjectDetail(String projectId) {
@@ -185,4 +192,88 @@ public class ProjectDetailServiceImpl implements ProjectDetailService {
}
return projectDetailVO;
}
@Override
public ProjectStatusVO getStatus(String projectId, BigDecimal receivableAmount) {
if(StringUtils.isBlank(projectId)){
throw new JeroBootException("项目id不能为空!");
}
if(receivableAmount.compareTo(new BigDecimal("0.00")) == 0){
return null;
}
// 获取项目信息
PayCommonProject payCommonProject = projectDetailMapper.queryProject(projectId);
if(Objects.isNull(payCommonProject)){
throw new JeroBootException("项目不存在!");
}
// 应收金额没有变更
if(receivableAmount.compareTo(payCommonProject.getReceivableAmount()) == 0){
return null;
}
ProjectStatusVO projectStatusVO = new ProjectStatusVO();
LambdaQueryWrapper<PayMailBillProject> queryPayMailBillProject = new LambdaQueryWrapper<>();
queryPayMailBillProject.eq(PayMailBillProject::getProjectId,projectId);
List<PayMailBillProject> listPayMailBillProject = payMailBillProjectService.list(queryPayMailBillProject);
// 开票金额
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);
if(receivableAmount.compareTo(invoice) == -1){
throw new JeroBootException("应收金额不能小于开票金额!");
}
List<String> list = listPayMailBillProject.stream().map(PayMailBillProject::getBillId).collect(Collectors.toList());
LambdaQueryWrapper<PayMailBill> queryPayMailBill = new LambdaQueryWrapper<>();
queryPayMailBill.in(PayMailBill::getId,list);
queryPayMailBill.eq(PayMailBill::getPostStatus,ProjectCommon.POST_STATUS1);
List<PayMailBill> listPayMailBill = payMailBillService.list(queryPayMailBill);
y = listPayMailBill.size();
}
// 到账
// 应收金额 = 实收金额 = 1
if(receivableAmount.compareTo(payCommonProject.getPaidAmount()) == 0){
projectStatusVO.setInAccount(ProjectCommon.IN_ACCOUNT1);
}
// 0 = 实收金额 = 0
if(payCommonProject.getPaidAmount().compareTo(new BigDecimal("0.00")) == 0){
projectStatusVO.setInAccount(ProjectCommon.IN_ACCOUNT0);
}
// 0 < 实收金额 && 实收金额 < 应收金额 = 2
if(payCommonProject.getPaidAmount().compareTo(new BigDecimal("0.00")) == 1
&& payCommonProject.getPaidAmount().compareTo(receivableAmount) ==-1){
projectStatusVO.setInAccount(ProjectCommon.IN_ACCOUNT2);
}
// 开票
// 不需要开票 || 开票金额 = 0 = 0
if(Objects.equals(payCommonProject.getNeedInvoice(),ProjectCommon.NEED_INVOICE0)
|| invoice.compareTo(new BigDecimal("0.00")) == 0){
projectStatusVO.setMakeInvoice(ProjectCommon.IN_ACCOUNT0);
}
// 开票金额 = 应收金额 = 1
if(invoice.compareTo(receivableAmount) == 0){
projectStatusVO.setMakeInvoice(ProjectCommon.IN_ACCOUNT1);
}
// 开票金额 > 0 && 开票金额 < 实收金额 = 2
if(invoice.compareTo(new BigDecimal("0.00")) == 1 && invoice.compareTo(payCommonProject.getPaidAmount()) == -1){
projectStatusVO.setMakeInvoice(ProjectCommon.IN_ACCOUNT2);
}
// 邮寄
// 开票金额 = 应收金额 && 邮寄次数 = 开票次数 = 1
if(invoice.compareTo(receivableAmount) == 0 && c == y){
projectStatusVO.setMail(ProjectCommon.IN_ACCOUNT2);
}
// 邮寄次数 = 0 = 0
if(y == 0){
projectStatusVO.setMail(ProjectCommon.IN_ACCOUNT0);
}
// 邮寄次数 > 0 && 邮寄次数 < 开票次数 = 2
if(y > 0 && y <= c){
projectStatusVO.setMail(ProjectCommon.IN_ACCOUNT2);
}
return projectStatusVO;
}
}
@@ -0,0 +1,21 @@
package com.jero.common.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class ProjectStatusVO implements Serializable {
/**
* 到账(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
private Integer inAccount;
/**
* 开票(1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志))
*/
private Integer makeInvoice;
/**
* 邮寄((1:全额(对勾),0:0(X),2:>0 && <总金额(半满标志)))
*/
private Integer mail;
}
@@ -46,7 +46,7 @@
UNION ALL
select gsub.id,g.working_group_project, gsub.charge_use, g.principal_id_a,g.principal_name_a,gsub.contacts_temporary_id_one,gsub.contacts_temporary_name_one,gsub.charge_company_temporary_name,gsub.receivable_amount,gsub.paid_amount,gsub.need_invoice,gsub.pack,gsub.in_account,gsub.make_invoice,gsub.mail,gsub.create_time,2,'',''
from pay_working_group g
inner join pay_working_group_subitem gsub on g.id = gsub.charge_company_id
inner join pay_working_group_subitem gsub on g.id = gsub.working_group_id
<where>
<if test="companyId != null and companyId != ''">
AND gsub.charge_company_id = #{companyId}
@@ -289,7 +289,7 @@
select gsub.id,g.working_group_project, gsub.charge_use,
g.principal_id_a,g.principal_name_a,gsub.contacts_temporary_id_one,gsub.contacts_temporary_name_one,gsub.charge_company_temporary_name,gsub.receivable_amount,gsub.paid_amount,gsub.need_invoice,gsub.pack,gsub.in_account,gsub.make_invoice,gsub.mail,gsub.create_time,2,'',''
from pay_working_group g
inner join pay_working_group_subitem gsub on g.id = gsub.charge_company_id
inner join pay_working_group_subitem gsub on g.id = gsub.working_group_id
<where>
<if test="companyId != null and companyId != ''">
AND gsub.charge_company_id = #{companyId}
@@ -1,5 +1,6 @@
package com.jero.project.controller;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -210,11 +211,11 @@ public class PayCommonProjectController extends JeroController<PayCommonProject,
if(!StringUtils.isBlank(msg)){
return Result.error(msg.toString());
}
// todo 缺少修改应收金额时查询状态,更新状态
payCommonProjectService.editPayCommonProject(payCommonProject);
return Result.OK("编辑成功!");
}
/**
* 通过id删除
@@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.vo.ProjectStatusVO;
import com.jero.contract.common.PayIncomeContractCommon;
import com.jero.contract.entity.PayIncomeContract;
import com.jero.contract.entity.PayIncomeContractAssociated;
@@ -65,6 +66,8 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
private IPayIncomeContractAssociatedService payIncomeContractAssociatedService;
@Autowired
private IPayPackCompanyProjectService payPackCompanyProjectService;
@Autowired
private ProjectDetailService projectDetailService;
@Override
@@ -126,6 +129,14 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
if(Objects.isNull(payCommonProjectOld)){
throw new JeroBootException("项目不存在!");
}
// 项目为打包状态 || 到账!=0 || 开票!=0 || 邮寄!=0
if(!Objects.equals(payCommonProject.getChargeCompanyId(),payCommonProjectOld.getChargeCompanyId())
&& (Objects.equals(payCommonProject.getPack(),PayProjectCommon.PACKAGING1)
|| !Objects.equals(payCommonProject.getInAccount(),PayProjectCommon.IN_ACCOUNT0)
|| !Objects.equals(payCommonProject.getMakeInvoice(),PayProjectCommon.MAKE_INVOICE0)
|| !Objects.equals(payCommonProject.getMail(),PayProjectCommon.MAIL0))){
throw new JeroBootException("来款企业不可更改!");
}
try {
// 编辑保存前再次校验来款项目是否存在
LambdaQueryWrapper<PayCommonProject> queryWrapper = new LambdaQueryWrapper<>();
@@ -142,8 +153,13 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
// 校验项目是否已关联合同
PayIncomeContract payIncomeContract = payIncomeContractService.checkPayIncomeContractAssociated(payCommonProjectOld.getId());
if(!Objects.isNull(payIncomeContract) && !Objects.equals(payIncomeContract.getContractNum(),payCommonProject.getContractNum())){
throw new JeroBootException("项目已关联合同,合同编号不可修改!");
if(!Objects.isNull(payIncomeContract)){
if(!Objects.equals(payCommonProject.getChargeWay(),PayProjectCommon.CHARGE_WAY2)){
throw new JeroBootException("项目已关联合同,来款方式不可修改!");
}
if(!Objects.equals(payIncomeContract.getContractNum(),payCommonProject.getContractNum())){
throw new JeroBootException("项目已关联合同,合同编号不可修改!");
}
}
if(Objects.isNull(payIncomeContract)){
@@ -171,6 +187,19 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
// 先删除临时表企业信息,联系人信息,邮寄联系人信息
payCompanyManagementTemporaryService.removeById(payCommonProjectOld.getChargeCompanyTemporaryId());
payContactsManagementTemporaryService.removeByIds(Arrays.asList(payCommonProjectOld.getContactsTemporaryId(),payCommonProjectOld.getMailContactsTemporaryId()));
// 变更应收金额,重新校验状态
ProjectStatusVO projectStatusVO = projectDetailService.getStatus(payCommonProject.getId(),payCommonProject.getReceivableAmount());
if(!Objects.isNull(projectStatusVO)){
if(!Objects.isNull(projectStatusVO.getInAccount())){
payCommonProject.setInAccount(projectStatusVO.getInAccount());
}
if(!Objects.isNull(projectStatusVO.getMakeInvoice())){
payCommonProject.setMakeInvoice(projectStatusVO.getMakeInvoice());
}
if(!Objects.isNull(projectStatusVO.getMail())){
payCommonProject.setMail(projectStatusVO.getMail());
}
}
payCommonProjectService.updateById(payCommonProject);
}
@@ -6,7 +6,9 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
import com.jero.common.exception.JeroBootException;
import com.jero.common.service.ProjectDetailService;
import com.jero.common.util.ValidUtil;
import com.jero.common.vo.ProjectStatusVO;
import com.jero.company.entity.PayCompanyManagement;
import com.jero.company.entity.PayContactsManagement;
import com.jero.company.service.IPayCompanyManagementService;
@@ -76,6 +78,8 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
private IPayPackCompanyProjectService payPackCompanyProjectService;
@Autowired
private IPayIncomeContractAssociatedService payIncomeContractAssociatedService;
@Autowired
private ProjectDetailService projectDetailService;
@Override
public void updateBatchSetCharge(SetChargeInput input) {
@@ -165,6 +169,14 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
if(Objects.isNull(payWorkingGroupSubItemOld)){
throw new JeroBootException("项目不存在!");
}
// 项目为打包状态 || 到账!=0 || 开票!=0 || 邮寄!=0
if(!Objects.equals(payWorkingGroupSubItem.getChargeCompanyId(),payWorkingGroupSubItemOld.getChargeCompanyId())
&& (Objects.equals(payWorkingGroupSubItem.getPack(),PayProjectCommon.PACKAGING1)
|| !Objects.equals(payWorkingGroupSubItem.getInAccount(),PayProjectCommon.IN_ACCOUNT0)
|| !Objects.equals(payWorkingGroupSubItem.getMakeInvoice(),PayProjectCommon.MAKE_INVOICE0)
|| !Objects.equals(payWorkingGroupSubItem.getMail(),PayProjectCommon.MAIL0))){
throw new JeroBootException("来款企业不可更改!");
}
if(payWorkingGroupSubItem.getChargeWay() == PayProjectCommon.CHARGE_WAY2){
if(Objects.isNull(payWorkingGroupSubItem.getReceivableAmount())){
throw new JeroBootException("应收金额不能为空");
@@ -203,8 +215,13 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
}
// 校验项目是否已关联合同
PayIncomeContract payIncomeContract = payIncomeContractService.checkPayIncomeContractAssociated(payWorkingGroupSubItem.getId());
if(!Objects.isNull(payIncomeContract) && !Objects.equals(payIncomeContract.getContractNum(),payWorkingGroupSubItem.getContractNum())){
throw new JeroBootException("项目已关联合同,合同编号不可修改!");
if(!Objects.isNull(payIncomeContract)){
if(!Objects.equals(payWorkingGroupSubItem.getChargeWay(),PayProjectCommon.CHARGE_WAY2)){
throw new JeroBootException("项目已关联合同,来款方式不可修改!");
}
if(!Objects.equals(payIncomeContract.getContractNum(),payWorkingGroupSubItem.getContractNum())){
throw new JeroBootException("项目已关联合同,合同编号不可修改!");
}
}
if(Objects.isNull(payIncomeContract)){
PayIncomeContract payIncomeContractAdd = null;
@@ -232,6 +249,19 @@ public class PayWorkingGroupSubItemServiceImpl extends ServiceImpl<PayWorkingGro
payCompanyManagementTemporaryService.removeById(payWorkingGroupSubItemOld.getChargeCompanyTemporaryId());
payContactsManagementTemporaryService.removeByIds(Arrays.asList(payWorkingGroupSubItemOld.getContactsTemporaryIdOne(),payWorkingGroupSubItemOld.getContactsTemporaryIdTwo(),payWorkingGroupSubItemOld.getContactsTemporaryIdThree()));
payWorkingGroupSubItem.setChargeUse(PayProjectCommon.CHARGE_USE1);
// 变更应收金额,重新校验状态
ProjectStatusVO projectStatusVO = projectDetailService.getStatus(payWorkingGroupSubItem.getId(),payWorkingGroupSubItem.getReceivableAmount());
if(!Objects.isNull(projectStatusVO)){
if(!Objects.isNull(projectStatusVO.getInAccount())){
payWorkingGroupSubItem.setInAccount(projectStatusVO.getInAccount());
}
if(!Objects.isNull(projectStatusVO.getMakeInvoice())){
payWorkingGroupSubItem.setMakeInvoice(projectStatusVO.getMakeInvoice());
}
if(!Objects.isNull(projectStatusVO.getMail())){
payWorkingGroupSubItem.setMail(projectStatusVO.getMail());
}
}
payWorkingGroupSubItemService.updateById(payWorkingGroupSubItem);
}