|
|
|
|
@ -2,6 +2,7 @@ package org.dromara.oa.erp.service.impl;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.convert.Convert;
|
|
|
|
|
import cn.hutool.core.map.MapUtil;
|
|
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
|
|
import com.github.yulichang.toolkit.JoinWrappers;
|
|
|
|
|
import com.github.yulichang.wrapper.MPJLambdaWrapper;
|
|
|
|
|
@ -20,11 +21,13 @@ import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
|
|
import org.dromara.common.tenant.helper.TenantHelper;
|
|
|
|
|
import org.dromara.oa.erp.domain.ErpProjectAcceptance;
|
|
|
|
|
import org.dromara.oa.erp.domain.ErpProjectInfo;
|
|
|
|
|
import org.dromara.oa.erp.domain.ErpProjectPlanStage;
|
|
|
|
|
import org.dromara.oa.erp.domain.bo.ErpProjectAcceptanceBo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectAcceptanceVo;
|
|
|
|
|
import org.dromara.oa.erp.domain.vo.ErpProjectInfoVo;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectAcceptanceMapper;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectInfoMapper;
|
|
|
|
|
import org.dromara.oa.erp.mapper.ErpProjectPlanStageMapper;
|
|
|
|
|
import org.dromara.oa.erp.service.IErpProjectAcceptanceService;
|
|
|
|
|
import org.dromara.system.api.RemoteCodeRuleService;
|
|
|
|
|
import org.dromara.workflow.api.RemoteWorkflowService;
|
|
|
|
|
@ -35,6 +38,7 @@ import org.springframework.context.event.EventListener;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
|
|
|
|
|
import java.util.Collection;
|
|
|
|
|
import java.util.Date;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Objects;
|
|
|
|
|
@ -52,8 +56,14 @@ public class ErpProjectAcceptanceServiceImpl implements IErpProjectAcceptanceSer
|
|
|
|
|
|
|
|
|
|
private static final String ACCEPTANCE_CODE_RULE = "1008";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 项目计划阶段-验收(字典 project_phases,与台账报表 acceptance_* 列一致)
|
|
|
|
|
*/
|
|
|
|
|
private static final String PROJECT_PHASE_ACCEPTANCE = "8";
|
|
|
|
|
|
|
|
|
|
private final ErpProjectAcceptanceMapper baseMapper;
|
|
|
|
|
private final ErpProjectInfoMapper projectInfoMapper;
|
|
|
|
|
private final ErpProjectPlanStageMapper projectPlanStageMapper;
|
|
|
|
|
|
|
|
|
|
@DubboReference(timeout = 30000)
|
|
|
|
|
private RemoteWorkflowService remoteWorkflowService;
|
|
|
|
|
@ -334,33 +344,23 @@ public class ErpProjectAcceptanceServiceImpl implements IErpProjectAcceptanceSer
|
|
|
|
|
acceptance.setAcceptanceStatus(OAStatusEnum.APPROVING.getStatus());
|
|
|
|
|
} else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.FINISH.getStatus())) {
|
|
|
|
|
acceptance.setAcceptanceStatus(OAStatusEnum.COMPLETED.getStatus());
|
|
|
|
|
|
|
|
|
|
// 审批完成后,更新项目信息的项目状态为 7(已验收)
|
|
|
|
|
// 审批完成后:更新项目状态为已验收;将计划「验收」阶段实际完成时间写入验收日期
|
|
|
|
|
Long projectId = acceptance.getProjectId();
|
|
|
|
|
if (projectId != null) {
|
|
|
|
|
ErpProjectInfo projectInfo = projectInfoMapper.selectById(projectId);
|
|
|
|
|
if (projectInfo != null) {
|
|
|
|
|
String currentStatus = projectInfo.getProjectStatus();
|
|
|
|
|
boolean needUpdate = false;
|
|
|
|
|
if (StringUtils.isBlank(currentStatus)) {
|
|
|
|
|
needUpdate = true;
|
|
|
|
|
} else {
|
|
|
|
|
try {
|
|
|
|
|
/**若项目当前状态为空或“小于 7”(比如 1 暂存、3 可用、5 已收货),则升级为 "7"(已验收);
|
|
|
|
|
不会把状态从更高值回退(如果以后有 8 之类更高状态,也不会被强制降级到 7)。 */
|
|
|
|
|
needUpdate = Integer.parseInt(currentStatus) < 7;
|
|
|
|
|
} catch (NumberFormatException e) {
|
|
|
|
|
// 非数字状态直接覆盖为已验收
|
|
|
|
|
needUpdate = true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
if (needUpdate) {
|
|
|
|
|
projectInfo.setProjectStatus("7"); // 7:已验收
|
|
|
|
|
projectInfo.setProjectStatus("7");
|
|
|
|
|
projectInfoMapper.updateById(projectInfo);
|
|
|
|
|
}
|
|
|
|
|
Date acceptanceDate = acceptance.getAcceptanceDate();
|
|
|
|
|
if (acceptanceDate != null) {
|
|
|
|
|
ErpProjectPlanStage stageUpdate = new ErpProjectPlanStage();
|
|
|
|
|
stageUpdate.setRealEndTime(acceptanceDate);
|
|
|
|
|
projectPlanStageMapper.update(stageUpdate, Wrappers.lambdaUpdate(ErpProjectPlanStage.class)
|
|
|
|
|
.eq(ErpProjectPlanStage::getProjectId, projectId)
|
|
|
|
|
.eq(ErpProjectPlanStage::getProjectPhases, PROJECT_PHASE_ACCEPTANCE));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
log.info("项目验收确认完成: acceptanceId={}", acceptance.getAcceptanceId());
|
|
|
|
|
} else if (Objects.equals(processEvent.getStatus(), BusinessStatusEnum.INVALID.getStatus())
|
|
|
|
|
|| Objects.equals(processEvent.getStatus(), BusinessStatusEnum.TERMINATION.getStatus())) {
|
|
|
|
|
|