1.0.51 项目信息添加时关联项目合同

dev
yinq 2 days ago
parent 10aa754afc
commit db9bf36d90

@ -164,6 +164,11 @@ public class ErpProjectInfoBo extends BaseEntity {
*/
private List<ErpProjectPlanStageBo> planStageList;
/**
*
*/
private List<ErpProjectContractsBo> projectContractsList;
public Map<String, Object> getVariables() {
if (variables == null) {
return new HashMap<>(16);

@ -23,6 +23,9 @@ import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo;
import org.dromara.oa.erp.domain.ErpProjectInfo;
import org.dromara.oa.erp.mapper.ErpProjectInfoMapper;
import org.dromara.oa.erp.service.IErpProjectInfoService;
import org.dromara.oa.erp.domain.bo.ErpProjectContractsBo;
import org.dromara.oa.erp.domain.ErpProjectContracts;
import org.dromara.oa.erp.mapper.ErpProjectContractsMapper;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.seata.spring.annotation.GlobalTransactional;
import org.dromara.common.core.exception.ServiceException;
@ -33,6 +36,9 @@ import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.transaction.annotation.Transactional;
/**
* Service
@ -47,6 +53,8 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
private final ErpProjectInfoMapper baseMapper;
private final ErpProjectContractsMapper projectContractsMapper;
@DubboReference(timeout = 30000)
private RemoteWorkflowService remoteWorkflowService;
@ -125,12 +133,22 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean insertByBo(ErpProjectInfoBo bo) {
ErpProjectInfo add = MapstructUtils.convert(bo, ErpProjectInfo.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setProjectId(add.getProjectId());
// 处理项目关联合同列表
List<ErpProjectContractsBo> projectContractsList = bo.getProjectContractsList();
if (projectContractsList != null && !projectContractsList.isEmpty()) {
for (ErpProjectContractsBo projectContractsBo : projectContractsList) {
projectContractsBo.setProjectId(add.getProjectId());
ErpProjectContracts projectContracts = MapstructUtils.convert(projectContractsBo, ErpProjectContracts.class);
projectContractsMapper.insert(projectContracts);
}
}
}
return flag;
}
@ -142,10 +160,57 @@ public class ErpProjectInfoServiceImpl implements IErpProjectInfoService {
* @return
*/
@Override
@Transactional(rollbackFor = Exception.class)
public Boolean updateByBo(ErpProjectInfoBo bo) {
ErpProjectInfo update = MapstructUtils.convert(bo, ErpProjectInfo.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
boolean flag = baseMapper.updateById(update) > 0;
if (flag) {
// 处理项目关联合同列表
List<ErpProjectContractsBo> projectContractsList = bo.getProjectContractsList();
// 查询原有的关联合同列表
MPJLambdaWrapper<ErpProjectContracts> lqwRecord = JoinWrappers.lambda(ErpProjectContracts.class);
lqwRecord.eq(ErpProjectContracts::getProjectId, bo.getProjectId());
List<ErpProjectContracts> projectContractsOldList = projectContractsMapper.selectList(lqwRecord);
if (projectContractsList != null && !projectContractsList.isEmpty()) {
// 获取原有关联合同的ID集合
Set<Long> oldProjectContractsIds = projectContractsOldList.stream()
.map(ErpProjectContracts::getProjectContractsId)
.collect(Collectors.toSet());
// 保存新的关联合同列表
for (ErpProjectContractsBo projectContractsBo : projectContractsList) {
projectContractsBo.setProjectId(bo.getProjectId());
ErpProjectContracts projectContracts = MapstructUtils.convert(projectContractsBo, ErpProjectContracts.class);
// 如果 projectContractsId 为空或不在原列表中,则新增;否则更新
if (projectContracts.getProjectContractsId() == null || !oldProjectContractsIds.contains(projectContracts.getProjectContractsId())) {
projectContracts.setProjectContractsId(null);
projectContractsMapper.insert(projectContracts);
} else {
projectContractsMapper.insertOrUpdate(projectContracts);
}
}
// 删除不在新列表中的关联合同
Set<Long> existingProjectContractsIds = projectContractsList.stream()
.map(ErpProjectContractsBo::getProjectContractsId)
.filter(Objects::nonNull)
.filter(oldProjectContractsIds::contains) // 只处理真实ID在原列表中存在
.collect(Collectors.toSet());
List<ErpProjectContracts> filterProjectContracts = projectContractsOldList.stream()
.filter(contract -> !existingProjectContractsIds.contains(contract.getProjectContractsId()))
.toList();
for (ErpProjectContracts filterProjectContract : filterProjectContracts) {
projectContractsMapper.deleteById(filterProjectContract.getProjectContractsId());
}
} else if (projectContractsList != null && projectContractsList.isEmpty()) {
// 如果新列表为空,删除所有原有关联
for (ErpProjectContracts projectContract : projectContractsOldList) {
projectContractsMapper.deleteById(projectContract.getProjectContractsId());
}
}
}
return flag;
}
/**

Loading…
Cancel
Save