|
|
|
|
@ -19,6 +19,7 @@ import org.dromara.oa.erp.domain.bo.ErpProjectChangeBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectChangeVo;
|
|
|
|
|
import org.dromara.oa.erp.mapper.*;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpProjectChangeService;
|
|
|
|
|
import org.dromara.system.api.RemoteCodeRuleService;
|
|
|
|
|
import org.dromara.workflow.api.RemoteWorkflowService;
|
|
|
|
|
import org.dromara.workflow.api.domain.RemoteStartProcess;
|
|
|
|
|
import org.dromara.workflow.api.event.ProcessEvent;
|
|
|
|
|
@ -51,6 +52,8 @@ import java.math.BigDecimal;
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
|
|
|
|
|
private static final String PROJECT_CHANGE_CODE_RULE = "1011";
|
|
|
|
|
|
|
|
|
|
// 计划变更主子表
|
|
|
|
|
private final ErpProjectChangeMapper baseMapper;
|
|
|
|
|
private final ErpProjectChangeBudgetMapper changeBudgetMapper;
|
|
|
|
|
@ -66,6 +69,8 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
|
|
|
|
|
@DubboReference(timeout = 30000)
|
|
|
|
|
private RemoteWorkflowService remoteWorkflowService;
|
|
|
|
|
@DubboReference(timeout = 30000)
|
|
|
|
|
private RemoteCodeRuleService remoteCodeRuleService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询项目变更申请
|
|
|
|
|
@ -203,6 +208,7 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
ErpProjectChange add = MapstructUtils.convert(bo, ErpProjectChange.class);
|
|
|
|
|
fillProjectChangeCode(add);
|
|
|
|
|
validEntityBeforeSave(add);
|
|
|
|
|
|
|
|
|
|
// 设置默认状态
|
|
|
|
|
@ -216,6 +222,7 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
|
|
if (flag) {
|
|
|
|
|
bo.setProjectChangeId(add.getProjectChangeId());
|
|
|
|
|
bo.setProjectChangeCode(add.getProjectChangeCode());
|
|
|
|
|
|
|
|
|
|
// 保存预算变更明细
|
|
|
|
|
if (bo.getBudgetList() != null && !bo.getBudgetList().isEmpty()) {
|
|
|
|
|
@ -261,6 +268,9 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ErpProjectChange update = MapstructUtils.convert(bo, ErpProjectChange.class);
|
|
|
|
|
if (StringUtils.isBlank(update.getProjectChangeCode())) {
|
|
|
|
|
update.setProjectChangeCode(existing.getProjectChangeCode());
|
|
|
|
|
}
|
|
|
|
|
validEntityBeforeSave(update);
|
|
|
|
|
|
|
|
|
|
boolean flag = baseMapper.updateById(update) > 0;
|
|
|
|
|
@ -306,12 +316,17 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
if (projectId == null) {
|
|
|
|
|
throw new ServiceException("项目ID不能为空");
|
|
|
|
|
}
|
|
|
|
|
// 查询项目信息
|
|
|
|
|
ErpProjectChangeVo vo = baseMapper.prepareByProjectId(projectId);
|
|
|
|
|
if (vo == null) {
|
|
|
|
|
throw new ServiceException("项目信息不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 检查是否有未完成的变更(状态1或2)
|
|
|
|
|
List<ErpProjectChange> existingChanges = baseMapper.selectList(
|
|
|
|
|
Wrappers.<ErpProjectChange>lambdaQuery()
|
|
|
|
|
.eq(ErpProjectChange::getProjectId, projectId)
|
|
|
|
|
.in(ErpProjectChange::getProjectChangeStatus, Arrays.asList("1", "2"))
|
|
|
|
|
.in(ErpProjectChange::getProjectChangeStatus, Arrays.asList("1", "2"))//项目变更状态(1暂存 2审批中 3可用)
|
|
|
|
|
.orderByDesc(ErpProjectChange::getCreateTime)
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
@ -326,17 +341,12 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
throw new ServiceException("该项目存在未完成的变更申请,请先完成或取消后再发起新的变更");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 查询项目信息
|
|
|
|
|
ErpProjectChangeVo vo = baseMapper.prepareByProjectId(projectId);
|
|
|
|
|
if (vo == null) {
|
|
|
|
|
throw new ServiceException("项目信息不存在");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 计算变更次数(已完成的变更数量)
|
|
|
|
|
Long changeCount = baseMapper.selectCount(
|
|
|
|
|
Wrappers.<ErpProjectChange>lambdaQuery()
|
|
|
|
|
.eq(ErpProjectChange::getProjectId, projectId)
|
|
|
|
|
.eq(ErpProjectChange::getProjectChangeStatus, "3")
|
|
|
|
|
.eq(ErpProjectChange::getProjectChangeStatus, "3")//项目变更状态(1暂存 2审批中 3可用)
|
|
|
|
|
);
|
|
|
|
|
vo.setChangeNumber(changeCount.intValue() + 1);
|
|
|
|
|
|
|
|
|
|
@ -345,8 +355,8 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
ErpProjectChange lastChange = baseMapper.selectOne(
|
|
|
|
|
Wrappers.<ErpProjectChange>lambdaQuery()
|
|
|
|
|
.eq(ErpProjectChange::getProjectId, projectId)
|
|
|
|
|
.eq(ErpProjectChange::getProjectChangeStatus, "3")
|
|
|
|
|
.orderByDesc(ErpProjectChange::getCreateTime)
|
|
|
|
|
.eq(ErpProjectChange::getProjectChangeStatus, "3")// 项目变更状态(1暂存 2审批中 3可用)
|
|
|
|
|
.orderByDesc(ErpProjectChange::getChangeNumber)// 按变更次数降序
|
|
|
|
|
.last("limit 1")
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
@ -463,7 +473,7 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
|
|
|
|
|
// 设置默认状态
|
|
|
|
|
vo.setProjectChangeStatus("1"); // 暂存
|
|
|
|
|
vo.setActiveFlag("1");
|
|
|
|
|
vo.setActiveFlag("1");//默认激活
|
|
|
|
|
|
|
|
|
|
return vo;
|
|
|
|
|
}
|
|
|
|
|
@ -566,6 +576,20 @@ public class ErpProjectChangeServiceImpl implements IErpProjectChangeService {
|
|
|
|
|
//TODO 做一些数据校验,如唯一约束
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 首次保存时自动生成项目变更编号
|
|
|
|
|
*/
|
|
|
|
|
private void fillProjectChangeCode(ErpProjectChange entity) {
|
|
|
|
|
if (StringUtils.isNotBlank(entity.getProjectChangeCode())) {
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
String code = remoteCodeRuleService.selectCodeRuleCode(PROJECT_CHANGE_CODE_RULE);
|
|
|
|
|
if (StringUtils.isBlank(code)) {
|
|
|
|
|
throw new ServiceException("生成项目变更编号失败");
|
|
|
|
|
}
|
|
|
|
|
entity.setProjectChangeCode(code);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 查询指定项目计划的所有变更记录
|
|
|
|
|
* 注意:ErpProjectChange 绑定的是 project_id 而非 project_plan_id
|
|
|
|
|
|