|
|
|
|
@ -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;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
|