普通项目通过合同编号反向关联

This commit is contained in:
梁琦涛
2021-09-09 10:36:36 +08:00
parent 7c11caf55f
commit 7e6628f7c7
6 changed files with 118 additions and 26 deletions
@@ -2,23 +2,23 @@ package com.jero.contract.common;
public class PayIncomeContractCommon {
/**
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
*/
public final static Integer STATUS1 = 1;
/**
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
*/
public final static Integer STATUS2 = 2;
/**
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
*/
public final static Integer STATUS3 = 3;
/**
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
*/
public final static Integer STATUS4 = 4;
/**
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
* 合同状态(1:草稿,2:待审核,3:已通过,4:未通过,5:已档)
*/
public final static Integer STATUS5 = 5;
/**
@@ -174,8 +174,8 @@ public class PayIncomeContract implements Serializable {
@ApiModelProperty(value = "打包年份")
private java.lang.String packYear;
/**合同状态(1:草稿,2:已通过,3:未通过,4:已归档)*/
@Excel(name = "合同状态(1:草稿,2:已通过,3:未通过,4:已档)", width = 15)
@ApiModelProperty(value = "合同状态(1:草稿,2:已通过,3:未通过,4:已档)")
@Excel(name = "合同状态(1:草稿,2:已通过,3:未通过,4:已档)", width = 15)
@ApiModelProperty(value = "合同状态(1:草稿,2:已通过,3:未通过,4:已档)")
@Dict(dicCode = "revenue_contract_status")
private java.lang.Integer status;
/**创建人*/
@@ -131,4 +131,24 @@ public interface IPayIncomeContractService extends IService<PayIncomeContract> {
* @Exception
*/
PayIncomeContract checkContractNum(String contractNum);
/**
* @Description 校验项目是否已关联合同
* @Author lqt
* @Date 2021/9/9
* @Param projectId 项目id
* @Return
* @Exception
*/
PayIncomeContract checkPayIncomeContractAssociated(String projectId);
/**
* @Description 校验合同编号是否存在,存在即关联合同
* @Author lqt
* @Date 2021/9/9
* @Param contractNum 合同编号
* @Param companyId 企业id
* @Param projectId 项目id
* @Return
* @Exception
*/
PayIncomeContract setPayIncomeContractAssociated(String contractNum,String companyId,String projectId);
}
@@ -23,6 +23,7 @@ import com.jero.contract.vo.PayIncomeContractOutput;
import com.jero.contract.vo.ProjectOutput;
import com.jero.modules.system.entity.SysUser;
import com.jero.modules.system.service.ISysUserService;
import com.jero.project.common.PayProjectCommon;
import com.jero.project.entity.PayCommonProject;
import com.jero.project.entity.PayWorkingGroup;
import com.jero.project.entity.PayWorkingGroupSubItem;
@@ -621,4 +622,55 @@ public class PayIncomeContractServiceImpl extends ServiceImpl<PayIncomeContractM
}
return null;
}
@Override
public PayIncomeContract checkPayIncomeContractAssociated(String projectId) {
// 检查项目是否关联了合同
LambdaQueryWrapper<PayIncomeContractAssociated> queryPayIncomeContractAssociated = new LambdaQueryWrapper<>();
queryPayIncomeContractAssociated.eq(PayIncomeContractAssociated::getProjectId,projectId);
List<PayIncomeContractAssociated> listPayIncomeContractAssociated = payIncomeContractAssociatedService.list(queryPayIncomeContractAssociated);
if(!CollectionUtils.isEmpty(listPayIncomeContractAssociated)){
PayIncomeContract payIncomeContract = payIncomeContractService.getById(listPayIncomeContractAssociated.get(0).getContractId());
// 关联合同不存在,去掉关联
if(Objects.isNull(payIncomeContract)){
payIncomeContractAssociatedService.removeById(listPayIncomeContractAssociated.get(0).getId());
return null;
}else{
return payIncomeContract;
}
}else{
return null;
}
}
@Override
public PayIncomeContract setPayIncomeContractAssociated(String contractNum, String companyId, String projectId) {
if(StringUtils.isAllBlank(contractNum,companyId,projectId)){
throw new JeroBootException("合同编号、企业di、项目id不能为空!");
}
PayIncomeContract payIncomeContract = payIncomeContractService.checkContractNum(contractNum);
// 能关联上合同
if(!Objects.isNull(payIncomeContract)){
if(Objects.equals(payIncomeContract.getStatus(),PayIncomeContractCommon.STATUS2)){
throw new JeroBootException("关联合同状态为待审核不可以进行关联!");
}
if(Objects.equals(payIncomeContract.getStatus(),PayIncomeContractCommon.STATUS3)){
throw new JeroBootException("关联合同状态为已通过不可以进行关联!");
}
if(Objects.equals(payIncomeContract.getStatus(),PayIncomeContractCommon.STATUS5)){
throw new JeroBootException("关联合同状态为已存档不可以进行关联!");
}
if(!Objects.equals(payIncomeContract.getSignedCompanyId(),companyId)){
throw new JeroBootException("关联合同中签订单位与项目中来款企业不匹配!");
}
PayIncomeContractAssociated payIncomeContractAssociated = new PayIncomeContractAssociated();
payIncomeContractAssociated.setContractId(payIncomeContract.getId());
payIncomeContractAssociated.setProjectType(Integer.parseInt(PayProjectCommon.PROJECT_TYPE1));
payIncomeContractAssociated.setProjectId(projectId);
payIncomeContractAssociatedService.save(payIncomeContractAssociated);
return payIncomeContract;
}
return null;
}
}
@@ -137,8 +137,6 @@ public class PayCommonProjectController extends JeroController<PayCommonProject,
List<PayCommonProjectOutput> listNew = new ArrayList<>();
List<PayCommonProjectOutput> listPayCommonProjectOutputNew = new ArrayList<>();
if(!CollectionUtils.isEmpty(list)){
// todo 获取打包项目对比数据
// payPackCompanyService.list();
List<String> listProjectId = list.stream().map(PayCommonProject::getId).collect(Collectors.toList());
// 获取已经关联合同的普通项目
LambdaQueryWrapper<PayIncomeContractAssociated> queryPayIncomeContractAssociated = new LambdaQueryWrapper<>();
@@ -1,6 +1,7 @@
package com.jero.project.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jero.common.api.vo.Result;
@@ -67,13 +68,14 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
}
@Override
@Transactional
public void addPayCommonProject(PayCommonProject payCommonProject) {
try {
// 编辑保存前再次校验来款项目是否存在
LambdaQueryWrapper<PayCommonProject> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(PayCommonProject::getChargeProject,payCommonProject.getChargeProject());
PayCommonProject payCommonProjectNew = payCommonProjectService.getOne(queryWrapper);
// 来款项目存在,并且编辑id与查询不同,则校验不通过
// 来款项目存在,则校验不通过
if(!Objects.isNull(payCommonProjectNew)) {
throw new JeroBootException("来款项目已存在!");
}
@@ -88,23 +90,29 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
payCommonProject.setMakeInvoice(PayProjectCommon.MAKE_INVOICE0);
payCommonProject.setMail(PayProjectCommon.MAIL0);
payCommonProjectService.save(payCommonProject);
PayIncomeContract payIncomeContract = null;
// 来款方式为合同,校验合同编号
if(Objects.equals(payCommonProject.getChargeWay(),PayProjectCommon.CHARGE_WAY2)){
PayIncomeContract payIncomeContract = payIncomeContractService.checkContractNum(payCommonProject.getContractNum());
if(!Objects.isNull(payIncomeContract) && Objects.equals(payIncomeContract.getSignedCompanyId(),payCommonProject.getChargeCompanyId())){
PayIncomeContractAssociated payIncomeContractAssociated = new PayIncomeContractAssociated();
payIncomeContractAssociated.setProjectId(payCommonProject.getId());
payIncomeContractAssociated.setContractId(payIncomeContract.getId());
payIncomeContractAssociated.setProjectType(Integer.parseInt(PayProjectCommon.PROJECT_TYPE1));
payIncomeContractAssociatedService.save(payIncomeContractAssociated);
// todo 缺少添加打包功能
}
payIncomeContract = payIncomeContractService.setPayIncomeContractAssociated(payCommonProject.getContractNum(),payCommonProject.getChargeCompanyId(),payCommonProject.getId());
}
// 关联了合同,判断合同是否打包,更新项目打包状态,添加打包
if(!Objects.isNull(payIncomeContract) && Objects.equals(payIncomeContract.getPack(),PayProjectCommon.PACKAGING1)){
LambdaUpdateWrapper<PayCommonProject> update = new LambdaUpdateWrapper<>();
update.eq(PayCommonProject::getId,payCommonProject.getId());
update.set(PayCommonProject::getPack,PayProjectCommon.PACKAGING1);
payCommonProjectService.update(update);
// todo 缺少添加打包功能
}
}
@Override
@Transactional
public void editPayCommonProject(PayCommonProject payCommonProject) {
PayCommonProject payCommonProjectOld = payCommonProjectService.getById(payCommonProject);
if(Objects.isNull(payCommonProjectOld)){
throw new JeroBootException("项目不存在!");
}
try {
// 编辑保存前再次校验来款项目是否存在
LambdaQueryWrapper<PayCommonProject> queryWrapper = new LambdaQueryWrapper<>();
@@ -118,16 +126,30 @@ public class PayCommonProjectServiceImpl extends ServiceImpl<PayCommonProjectMap
log.info("普通项目管理-编辑异常",e);
throw new JeroBootException("来款项目已存在!");
}
// 来款方式为合同,校验合同编号
if(Objects.equals(payCommonProject.getChargeWay(),PayProjectCommon.CHARGE_WAY2)){
payIncomeContractService.checkContractNum(payCommonProject.getContractNum());
// 校验项目是否已关联合同
PayIncomeContract payIncomeContract = payIncomeContractService.checkPayIncomeContractAssociated(payCommonProjectOld.getId());
if(!Objects.isNull(payIncomeContract) && !Objects.equals(payIncomeContract.getContractNum(),payCommonProject.getContractNum())){
throw new JeroBootException("项目已关联合同,合同编号不可修改!");
}
PayIncomeContract payIncomeContractAdd = null;
// 没有关联合同 && 来款方式为合同,校验合同编号
if(Objects.isNull(payIncomeContract) && Objects.equals(payCommonProject.getChargeWay(),PayProjectCommon.CHARGE_WAY2)){
payIncomeContractAdd = payIncomeContractService.setPayIncomeContractAssociated(payCommonProject.getContractNum(),payCommonProject.getChargeCompanyId(),payCommonProject.getId());
}
// 关联了合同,判断合同是否打包,更新项目打包状态,添加打包
if(!Objects.isNull(payIncomeContractAdd) && Objects.equals(payIncomeContractAdd.getPack(),PayProjectCommon.PACKAGING1)){
LambdaUpdateWrapper<PayCommonProject> update = new LambdaUpdateWrapper<>();
update.eq(PayCommonProject::getId,payCommonProjectOld.getId());
update.set(PayCommonProject::getPack,PayProjectCommon.PACKAGING1);
payCommonProjectService.update(update);
// todo 缺少添加打包功能
}
setPayCommonProject(payCommonProject);
// 先删除临时表企业信息,联系人信息,邮寄联系人信息
PayCommonProject payCommonProjectOld = payCommonProjectService.getById(payCommonProject.getId());
if(Objects.isNull(payCommonProjectOld)){
throw new JeroBootException("来款项目不存在!");
}
payCompanyManagementTemporaryService.removeById(payCommonProjectOld.getChargeCompanyId());
payContactsManagementTemporaryService.removeByIds(Arrays.asList(payCommonProjectOld.getContactsId(),payCommonProjectOld.getMailContactsId()));
payCommonProjectService.updateById(payCommonProject);