Browse Source

modify:

1. 全流程提醒;
tags/24102401
WendyYang 4 months ago
parent
commit
0abd972e44
18 changed files with 250 additions and 24 deletions
  1. +7
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java
  2. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectHelper.java
  3. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectManage.java
  4. +80
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java
  5. +3
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/DeclaredProgressStatisticsVO.java
  6. +6
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IPurchaseService.java
  7. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectStoppedChangeController.java
  8. +10
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/stage/ComplianceReviewHandle.java
  9. +76
    -3
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/helper/ProjectChangeStopHelper.java
  10. +44
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectChangeManage.java
  11. +1
    -7
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java
  12. +3
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/ProjectDTO.java
  13. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/entity/Project.java
  14. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java
  15. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderMainStatus.java
  16. +3
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/req/SubmitProjectChangeApplyReq.java
  17. +3
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/ProjectDetailVO.java
  18. +6
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java

+ 7
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/controller/PurchaseController.java View File

@@ -79,6 +79,13 @@ public class PurchaseController {
purchaseManage.submitPurchaseNotice(req);
}

@ApiOperation("新增采购公告")
@WebLog("新增采购公告")
@PostMapping("/notice/append")
public void appendPurchaseNotice(@RequestBody SubmitPurchaseNoticeReq req) {
purchaseManage.appendPurchaseNotice(req);
}

@ApiOperation("采购&合同信息备案")
@WebLog("采购&合同信息备案")
@PostMapping("/record/submit")


+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectHelper.java View File

@@ -17,6 +17,7 @@ import com.hz.pm.api.projectdeclared.model.dto.ProjectConditionDTO;
import com.hz.pm.api.projectlib.model.dto.ProjectDTO;
import com.hz.pm.api.projectlib.model.dto.ProjectPaymentPlanDTO;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.security.model.UserInfoDetails;
@@ -63,6 +64,7 @@ public class DeclaredProjectHelper {
LambdaQueryWrapper<Project> query = Wrappers.lambdaQuery(Project.class)
.eq(Project::getProjectName, project.getProjectName())
.eq(Project::getNewest, Boolean.TRUE)
.ne(Project::getStatus, ProjectStatus.CHANGE_APPLY_PASSED.getCode())
.ne(Objects.nonNull(projectCode), Project::getProjectCode, projectCode)
.last(BizConst.LIMIT_1);
if (projectService.count(query) > 0) {


+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/DeclaredProjectManage.java View File

@@ -371,6 +371,7 @@ public class DeclaredProjectManage {
});
DeclaredProgressStatisticsVO stat = new DeclaredProgressStatisticsVO();
stat.setTotalCount(projects.size());
stat.setTodoCount(countMap.getOrDefault(ProjectStatus.TO_BE_DECLARED, 0L));
stat.setAuditCount(countMap.getOrDefault(ProjectStatus.ON_COMPLIANCE_REVIEW, 0L));
stat.setFailedCount(countMap.getOrDefault(ProjectStatus.COMPLIANCE_REVIEW_FAILED, 0L));
stat.setPassedCount(countMap.getOrDefault(ProjectStatus.COMPLIANCE_REVIEW_PASSED, 0L));


+ 80
- 4
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/PurchaseManage.java View File

@@ -17,6 +17,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.collect.Lists;
import com.hz.pm.api.common.enumeration.ProjectProcessType;
import com.hz.pm.api.common.exception.ReturnException;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.model.constant.ExistsSqlConst;
import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent;
@@ -47,15 +48,13 @@ import com.hz.pm.api.projectlib.entity.PurchaseStatusChange;
import com.hz.pm.api.projectlib.helper.ProjectManageUtil;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
import com.hz.pm.api.projectlib.model.enumeration.status.*;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
import com.hz.pm.api.projectlib.model.vo.TenderListInfoVO;
import com.hz.pm.api.projectlib.service.IProjectGovSystemReplaceInfosService;
import com.hz.pm.api.projectlib.service.IProjectInstService;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService;
import com.hz.pm.api.projectlib.service.*;
import com.hz.pm.api.scheduler.listener.event.MhTodoHandedEvent;
import com.hz.pm.api.scheduler.listener.event.MhTodoSendEvent;
import com.hz.pm.api.sys.manage.ProcessModelManage;
@@ -134,6 +133,7 @@ public class PurchaseManage {
private final IPurchaseStatusChangeService purchaseStatusChangeService;
private final MhUnitQueryAuthHelper mhUnitQueryAuthHelper;
private final IProjectGovSystemReplaceInfosService projectGovSystemReplaceInfosService;
private final IProjectStatusChangeService projectStatusChangeService;

public PurchaseProgressStatVO purchaseProgressStatistics(ProjectListReq req) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
@@ -472,6 +472,82 @@ public class PurchaseManage {
}
}

@Transactional(rollbackFor = Exception.class)
public synchronized void appendPurchaseNotice(SubmitPurchaseNoticeReq req) {
UserInfoDetails user = LoginUserUtil.loginUserDetail();
Long projectId = req.getProjectId();
long purchaseCount = purchaseService.countByProjectId(projectId);
if (purchaseCount == 0) {
throw ReturnException.wrap("请先发布采购公告");
}
req.getTenders().removeIf(w -> w.getBidId() != null);
Project project = projectService.getNewestNoNull(projectId);
List<MhPurchaseNoticeDTO> notices = new ArrayList<>();
List<Purchase> purchases = req.getTenders().stream().map(w -> {
Purchase purchase = new Purchase();
purchase.setPurchaseMethod(w.getPurchaseMethod());
purchase.setBidAddress(w.getBidAddress());
purchase.setBidName(w.getBidName());
purchase.setBidBudget(w.getBidBudget());
purchase.setBidDoc(w.getBidDoc());
purchase.setBidStartTime(w.getBidStartTime());
purchase.setBidEndTime(w.getBidEndTime());
purchase.setProjectId(projectId);
purchase.setPurchaseConnectAddress(w.getPurchaseConnectAddress());
purchase.setPurchasePhone(w.getPurchasePhone());
purchase.setPurchaseRemark(w.getPurchaseRemark());
purchase.setPurchaseScope(w.getPurchaseScope());
purchase.setPurchaseUnit(w.getPurchaseUnit());
purchase.setPurchaseUnitId(w.getPurchaseUnitId());
purchase.setPurchaseContact(w.getPurchaseContact());
purchase.setBidType(w.getBidType());
purchase.setPurchaseDate(w.getPurchaseDate());
purchase.setBidPayAmount(w.getBidPayAmount());
purchase.setPublishMhNotice(w.getPublishMhNotice());
purchase.setCreateBy(user.getUserIdStr());
purchase.setStatus(TenderMainStatus.TO_BE_SUBMIT_PURCHASE_CONSTRUCTION_INFO.getCode());
purchase.setXcfhxApplyStatus(TenderXcfhxApplyStatus.TO_BE_SUBMIT_XCFHX_APPLY.getCode());
if (Boolean.TRUE.equals(mhPurchaseNoticeOpen) && Boolean.TRUE.equals(w.getPublishMhNotice())) {
notices.add(buildPurchaseNotice(w, user));
}
return purchase;
}).collect(Collectors.toList());
purchaseService.saveBatch(purchases);
List<ProjectGovSystemReplaceInfos> projectGovSystemReplaceInfos = new ArrayList<>();
for (int i = 0; i < req.getTenders().size(); i++) {
List<Long> systemReplaceInfoIds = req.getTenders().get(i).getSystemReplaceInfoIds();
if (CollUtil.isNotEmpty(systemReplaceInfoIds)) {
Long bidId = purchases.get(i).getId();
for (Long systemReplaceInfoId : systemReplaceInfoIds) {
ProjectGovSystemReplaceInfos replaceInfos = new ProjectGovSystemReplaceInfos();
replaceInfos.setId(systemReplaceInfoId);
replaceInfos.setBidId(bidId);
projectGovSystemReplaceInfos.add(replaceInfos);
}
}
}
projectGovSystemReplaceInfosService.updateBatchById(projectGovSystemReplaceInfos);
project.setStatus(ProjectStatus.ON_PURCHASING.getCode());
project.setStage(ProjectStatus.ON_PURCHASING.getStage());
projectService.updateById(project);
Wrapper<ProjectStatusChange> query = Wrappers.lambdaQuery(ProjectStatusChange.class)
.eq(ProjectStatusChange::getProjectId, project.getProjectCode())
.in(ProjectStatusChange::getEvent,
ProjectStateChangeEvent.SUBMIT_PURCHASE_CONTRACT_RECORD,
ProjectStateChangeEvent.SUBMIT_PURCHASE_ORG_CONFIRM,
ProjectStateChangeEvent.SUBMIT_FIRST_INSPECTED_FILES,
ProjectStateChangeEvent.FINAL_ACCEPTANCE_APPLICATION,
ProjectStateChangeEvent.FINAL_ACCEPTANCE_PASS);
projectStatusChangeService.remove(query);
for (Purchase purchase : purchases) {
SpringUtil.publishEvent(MhTodoSendEvent.of(MHTodoTypeEnum.WITHOUT_PURCHASE_CONTRACT, project, purchase));
}
// 发布采购公告
if (!notices.isEmpty()) {
mhApiClient.publishPurchaseNotice(notices);
}
}

private MhPurchaseNoticeDTO buildPurchaseNotice(PurchaseNoticeTenderDTO w, UserInfoDetails user) {
if (environmentUtil.isDevEnv()) {
return null;


+ 3
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/model/vo/DeclaredProgressStatisticsVO.java View File

@@ -26,4 +26,7 @@ public class DeclaredProgressStatisticsVO {
@ApiModelProperty("未通过")
private Long failedCount;

@ApiModelProperty("待申报")
private Long todoCount;

}

+ 6
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/service/IPurchaseService.java View File

@@ -30,6 +30,12 @@ public interface IPurchaseService extends IService<Purchase> {
.orderByAsc(Purchase::getId));
}

default long countByProjectId(Long projectId) {
return count(Wrappers.lambdaQuery(Purchase.class)
.eq(Purchase::getProjectId, projectId)
.orderByAsc(Purchase::getId));
}

default List<Purchase> listByProjectIds(Collection<Long> projectIds) {
return list(Wrappers.lambdaQuery(Purchase.class)
.in(Purchase::getProjectId, projectIds)


+ 1
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectStoppedChangeController.java View File

@@ -54,7 +54,7 @@ public class ProjectStoppedChangeController {
@ApiOperation("提交项目变更申请")
@WebLog("提交项目变更申请")
public void submitChangeApply(@RequestBody @Valid SubmitProjectChangeApplyReq req) {
projectChangeManage.submitProjectChangeApply(req);
projectChangeManage.submitProjectChangeApplyNew(req);
}

@GetMapping("/stopped/page")


+ 10
- 6
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/stage/ComplianceReviewHandle.java View File

@@ -9,6 +9,7 @@ import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
import com.hz.pm.api.projectlib.service.IProjectInstService;
import com.hz.pm.api.projectlib.service.IProjectStatusChangeService;
import com.wflow.workflow.bean.vo.ProcessDetailVO;
@@ -18,10 +19,7 @@ import com.wflow.workflow.service.ProcessInstanceService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.*;

import static com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent.*;

@@ -47,18 +45,24 @@ public class ComplianceReviewHandle extends AbstractProcessHandle {
@Override
public void handle(HandleParamContext ctx) {
Project project = ctx.getProject();
boolean notDeclared = ProjectStatus.TO_BE_DECLARED.eq(project.getStatus());
// 项目申报节点
ProcessDetailVO startNode = new ProcessDetailVO();
startNode.setProcessName(ProcessNode.PROJECT_DECLARED.getName());
startNode.setFinishTime(project.getCreateOn());
startNode.setStepStatus(StepStatusEnum.COMPLETED);
startNode.setStepStatus(notDeclared ? StepStatusEnum.NOT_START : StepStatusEnum.COMPLETED);
ctx.getProcessDetails().add(startNode);
// 合规性审查
ProcessDetailVO detail = new ProcessDetailVO();
detail.setProcessName(getProcessNode().getName());
ctx.getProcessDetails().add(detail);
// 项目状态为待立项批复之前的状态
Map<ProjectStateChangeEvent, ProjectStatusChange> eventMap = projectStatusChangeService.listLastEventMap(project.getProjectCode());
Map<ProjectStateChangeEvent, ProjectStatusChange> eventMap;
if (notDeclared) {
eventMap = Collections.emptyMap();
} else {
eventMap = projectStatusChangeService.listLastEventMap(project.getProjectCode());
}
ctx.setProjectStatusChanges(eventMap);
if (!eventMap.containsKey(PROJECT_APPLICATION_SUBMIT)) {
detail.setStepStatus(StepStatusEnum.NOT_START);


+ 76
- 3
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/helper/ProjectChangeStopHelper.java View File

@@ -1,9 +1,9 @@
package com.hz.pm.api.projectlib.helper;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
@@ -16,11 +16,15 @@ import com.hz.pm.api.projectdeclared.model.dto.*;
import com.hz.pm.api.projectdeclared.model.entity.*;
import com.hz.pm.api.projectdeclared.model.vo.PreInsAcceptancePersonVO;
import com.hz.pm.api.projectdeclared.service.*;
import com.hz.pm.api.projectdeclared.utils.ProjectCodeGenUtil;
import com.hz.pm.api.projectdeclared.utils.ProjectDetailDiffUtil.FieldDiff;
import com.hz.pm.api.projectlib.entity.ProjectGovSystemReplaceInfos;
import com.hz.pm.api.projectlib.entity.PurchaseStatusChange;
import com.hz.pm.api.projectlib.model.dto.ProjectDTO;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange;
import com.hz.pm.api.projectlib.model.enumeration.status.*;
import com.hz.pm.api.projectlib.service.IProjectGovSystemReplaceInfosService;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.projectlib.service.IProjectStatusChangeService;
import com.hz.pm.api.projectlib.service.IPurchaseStatusChangeService;
@@ -31,6 +35,7 @@ import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

import java.lang.reflect.Field;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;

@@ -55,6 +60,8 @@ public class ProjectChangeStopHelper {
private final IContractService contractService;
private final IProjectService projectService;
private final ProjectSaveHelper projectSaveHelper;
private final ProjectCodeGenUtil projectCodeGenUtil;
private final IProjectGovSystemReplaceInfosService systemReplaceInfosService;

/**
* 根据状态变更记录重置项目、标段状态
@@ -143,8 +150,10 @@ public class ProjectChangeStopHelper {
history.setStatus(buildBizStatus(projEvent).getCode());
projectChangeHistoryService.updateById(history);
if (projEvent.equals(ProjectStateChangeEvent.CHANGE_APPLY_PASS)) {
EditProjectDetailDTO editProjectDetail = JSONUtil.toBean(history.getChangeContent(), EditProjectDetailDTO.class);
projectEditRewrite(projectCode, editProjectDetail);
// EditProjectDetailDTO editProjectDetail = JSONUtil.toBean(history.getChangeContent(), EditProjectDetailDTO.class);
// projectEditRewrite(projectCode, editProjectDetail);
changeApplyPassHandle(projectId, projectCode, projEvent);
return;
}
}
ProjectStatusChange change = projectStatusChangeService.getLastOne(projBeforeEvent, projectId);
@@ -187,6 +196,70 @@ public class ProjectChangeStopHelper {
}
}

private void changeApplyPassHandle(Long projectId, String projectCode, ProjectStateChangeEvent projEvent) {
Project project = projectService.getNewProject(projectId);
projectStatusChangeService.save(ProjectStatusChange.builder()
.projectId(projectId)
.event(projEvent.name())
.projectCode(projectCode)
.beforeStatus(ProjectStatus.ON_CHANGE_APPLY.getCode())
.afterStatus(ProjectStatus.CHANGE_APPLY_PASSED.getCode())
.build());
project.setStatus(ProjectStatus.CHANGE_APPLY_PASSED.getCode());
projectService.updateById(project);
List<Purchase> purchases = purchaseService.listByProjectId(projectId);
if (CollUtil.isEmpty(purchases)) {
List<PurchaseStatusChange> purchaseStatusChanges = new ArrayList<>();
for (Purchase purchase : purchases) {
PurchaseStatusChange purchaseStatusChange = PurchaseStatusChange.builder()
.bidId(purchase.getId())
.projectId(purchase.getProjectId())
.projectCode(projectCode)
.event(TenderStateChangeEvent.CHANGE_APPLY_PASS.name())
.beforeStatus(TenderMainStatus.ON_CHANGE_APPLY.getCode())
.afterStatus(TenderMainStatus.CHANGE_APPLY_PASSED.getCode())
.build();
purchaseStatusChanges.add(purchaseStatusChange);
}
purchaseService.updateBatchById(purchases);
purchaseStatusChangeService.saveBatch(purchaseStatusChanges);
}
Project newProj = new Project();
newProj.setNewest(Boolean.TRUE);
newProj.setHisProjectCode(projectCode);
newProj.setProjectName(project.getProjectName());
newProj.setProjectType(project.getProjectType());
newProj.setProjectCode(projectCodeGenUtil.generateProjectCode(BeanUtil.copyProperties(newProj, ProjectDTO.class)));
newProj.setUnitStrip(project.getUnitStrip());
newProj.setCreateOn(LocalDateTime.now());
newProj.setUpdateOn(newProj.getCreateOn());
newProj.setStage(ProjectStatus.NOT_APPROVED.getCode());
newProj.setStatus(ProjectStatus.TO_BE_DECLARED.getCode());
newProj.setProjectYear(project.getProjectYear());
newProj.setBeginTime(project.getBeginTime());
newProj.setEndTime(project.getEndTime());
newProj.setBuildOrgName(project.getBuildOrgName());
newProj.setBuildOrgCode(project.getBuildOrgCode());
newProj.setContactName(project.getContactName());
newProj.setContactPhone(project.getContactPhone());
newProj.setDeclareAmount(project.getDeclareAmount());
newProj.setDeclareGovSuperiorFinanceAmount(project.getDeclareGovSuperiorFinanceAmount());
newProj.setConstructionPlanFile(project.getConstructionPlanFile());
newProj.setSponsor(project.getSponsor());
projectService.save(newProj);
List<ProjectGovSystemReplaceInfos> replaceInfos = systemReplaceInfosService.listByProjectCode(projectCode);
if (CollUtil.isNotEmpty(replaceInfos)) {
replaceInfos.forEach(w -> {
w.setId(null);
w.setBidId(null);
w.setCreateOn(null);
w.setProjectId(newProj.getId());
w.setProjectCode(newProj.getProjectCode());
});
systemReplaceInfosService.saveBatch(replaceInfos);
}
}

private IStatus<Integer, String> buildBizStatus(ProjectStateChangeEvent event) {
IStatus<Integer, String> bizStatus;
switch (event) {


+ 44
- 1
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectChangeManage.java View File

@@ -2,6 +2,7 @@ package com.hz.pm.api.projectlib.manage;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
@@ -10,6 +11,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hz.pm.api.common.enumeration.ProjectProcessType;
import com.hz.pm.api.common.exception.ReturnException;
import com.hz.pm.api.common.util.BizUtils;
import com.hz.pm.api.external.model.enumeration.MhUnitStripEnum;
import com.hz.pm.api.projectdeclared.model.entity.ProjectChangeHistory;
import com.hz.pm.api.projectdeclared.manage.DeclaredProjectHelper;
@@ -80,6 +82,45 @@ public class ProjectChangeManage {
private final IProjectChangeHistoryService projectChangeHistoryService;

@Transactional(rollbackFor = Exception.class)
public synchronized void submitProjectChangeApplyNew(SubmitProjectChangeApplyReq req) {
Project project = projectService.getNewProject(req.getProjectId());
if (ProjectStatus.ON_CHANGE_APPLY.eq(project.getStatus()) ||
ProjectStatus.STOPPED_PASSED.eq(project.getStatus())) {
throw ReturnException.wrap("暂无法提交变更申请");
}
// 采购信息变更比较
UserInfoDetails userDetail = LoginUserUtil.loginUserDetail();

WflowModels wflowModels = processModelManage.getWflowModelsNoNull(ProjectProcessType.PROJECT_CHANGE, userDetail.getMhUnitId());

ProcessStartParamsVo params = new ProcessStartParamsVo();
params.setUser(declaredProjectHelper.buildUser(userDetail));
params.setProcessUsers(Collections.emptyMap());
params.setFormData(Collections.emptyMap());

// 获取发起单位、发起单位主管单位、发起单位上级主管条线单位信息
Map<String, OrgInfoDTO> orgModelMap = declaredProjectHelper.buildOrgModelMap(userDetail, project);
String instCode = processInstanceService.startProcessLs(wflowModels, params, orgModelMap);
ProjectInst projectInst = new ProjectInst();
projectInst.setInstCode(instCode);
projectInst.setProjectId(project.getId());
projectInst.setInstType(ProjectProcessType.PROJECT_CHANGE);
projectInstService.save(projectInst);
projectChangeStopHelper.changeProjectPurchaseStatus(project, CHANGE_APPLY_SUBMIT);
// 保存变更历史
ProjectChangeHistory projectChangeHistory = new ProjectChangeHistory();
projectChangeHistory.setChangeContent(StrUtil.EMPTY);
projectChangeHistory.setChangeReason(req.getChangeReason());
projectChangeHistory.setProjectId(project.getId());
projectChangeHistory.setProjectCode(project.getProjectCode());
projectChangeHistory.setStatus(ProjectChangeStatus.ON_CHANGE_APPLY.getCode());
projectChangeHistory.setCanResubmit(Boolean.TRUE);
projectChangeHistory.setInstCode(instCode);
projectChangeHistory.setId(req.getId());
projectChangeHistoryService.saveOrUpdate(projectChangeHistory);
}

@Transactional(rollbackFor = Exception.class)
public synchronized void submitProjectChangeApply(SubmitProjectChangeApplyReq req) {
JSONObject projectEditDetail = req.getProjectEditDetail();
JSONObject projJsonObj = projectEditDetail.getJSONObject(EditProjectDetailDTO.FIELD_PROJECT);
@@ -224,7 +265,9 @@ public class ProjectChangeManage {
return null;
}
ProjectChangeDetailVO result = new ProjectChangeDetailVO();
result.setProjectEditDetail(JSONUtil.toBean(changeHistory.getChangeContent(), EditProjectDetailDTO.class));
if (StrUtil.isNotBlank(changeHistory.getChangeContent())) {
result.setProjectEditDetail(JSONUtil.toBean(changeHistory.getChangeContent(), EditProjectDetailDTO.class));
}
result.setChangeReason(changeHistory.getChangeReason());
result.setCreateOn(changeHistory.getCreateOn());
return result;


+ 1
- 7
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java View File

@@ -44,7 +44,6 @@ import com.hz.pm.api.portrait.model.vo.TagVO;
import com.hz.pm.api.portrait.service.IProjectTagService;
import com.hz.pm.api.portrait.service.ITagService;
import com.hz.pm.api.projectdeclared.manage.ConstructionManage;
import com.hz.pm.api.projectdeclared.manage.ProjectReviewManage;
import com.hz.pm.api.projectdeclared.model.dto.DelayedApplyDTO;
import com.hz.pm.api.projectdeclared.model.entity.Operation;
import com.hz.pm.api.projectdeclared.model.entity.PreInsAcceptancePerson;
@@ -55,19 +54,16 @@ import com.hz.pm.api.projectdeclared.service.IPreInsAcceptancePersonService;
import com.hz.pm.api.projectdeclared.service.IPurchaseService;
import com.hz.pm.api.projectdeclared.utils.ProjectCodeGenUtil;
import com.hz.pm.api.projectdeclared.utils.ProjectIdCodeCacheUtil;
import com.hz.pm.api.projectlib.entity.ProjectApprovalAmount;
import com.hz.pm.api.projectlib.entity.ProjectGovSystemReplaceInfos;
import com.hz.pm.api.projectlib.handle.ProcessProgressHelper;
import com.hz.pm.api.projectlib.helper.ProjectManageUtil;
import com.hz.pm.api.projectlib.helper.ProjectSaveHelper;
import com.hz.pm.api.projectlib.model.constant.ProjectConstant;
import com.hz.pm.api.projectlib.model.dto.GovSystemReplaceInfoUpgradeContentDTO;
import com.hz.pm.api.projectlib.model.dto.GovSystemReplaceInfoDTO;
import com.hz.pm.api.projectlib.model.dto.ProjectApprovalAmountDTO;
import com.hz.pm.api.projectlib.model.dto.GovSystemReplaceInfoUpgradeContentDTO;
import com.hz.pm.api.projectlib.model.dto.ProjectDTO;
import com.hz.pm.api.projectlib.model.dto.ProjectPaymentPlanDTO;
import com.hz.pm.api.projectlib.model.entity.*;
import com.hz.pm.api.projectlib.model.enumeration.InstTypeEnum;
import com.hz.pm.api.projectlib.model.enumeration.ProjectRenewalApprovalStatusEnum;
import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
import com.hz.pm.api.projectlib.model.enumeration.status.TenderMainStatus;
@@ -147,9 +143,7 @@ public class ProjectLibManage {
private final MhUnitCache mhUnitCache;
private final IMhProjectSchemaTargetDataService projectSchemaTargetDataService;
private final IMhProjectService mhProjectService;
private final ProjectReviewManage projectReviewManage;
private final IMeetingInnerProjectService meetingInnerProjectService;
private final IProjectApprovalAmountService projectApprovalAmountService;
private final AmountApprovalManage amountApprovalManage;

public PageVo<ProjectLibListItemVO> projectLibList(ProjectListReq req) {


+ 3
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/ProjectDTO.java View File

@@ -392,4 +392,7 @@ public class ProjectDTO implements Serializable {
@ApiModelProperty("评审金额")
private BigDecimal reviewAmount;

@ApiModelProperty("历史项目编码")
private String hisProjectCode;

}

+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/entity/Project.java View File

@@ -506,4 +506,6 @@ public class Project implements Serializable {
@ApiModelProperty("迭代升级内容")
private String iterativeUpgradeContent;

private String hisProjectCode;

}

+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java View File

@@ -86,6 +86,7 @@ public enum ProjectStatus implements IStatus<Integer, String> {
*/
CHANGE(50000, "项目变更", 50000),
ON_CHANGE_APPLY(50001, "项目变更中", 50000),
CHANGE_APPLY_PASSED(50002, "已变更", 50000),

/**
* 项目阶段:已归档


+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/TenderMainStatus.java View File

@@ -37,6 +37,7 @@ public enum TenderMainStatus implements ITenderStatus {
FINALLY_INSPECTED_FAILED(ProjectStatus.ON_FINALLY_INSPECTED, 502, "终验申报不通过"),
FINALLY_INSPECTED_PASSED(ProjectStatus.ACCEPTED, 601, "终验完成"),
ON_CHANGE_APPLY(ProjectStatus.ON_CHANGE_APPLY, 701, "项目变更中"),
CHANGE_APPLY_PASSED(ProjectStatus.ON_CHANGE_APPLY, 702, "已变更"),
ON_STOPPED_APPLY(ProjectStatus.ON_STOPPED_APPLY, 901, "项目终止审核中"),
STOPPED_PASSED(ProjectStatus.STOPPED, 902, "项目终止");



+ 3
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/req/SubmitProjectChangeApplyReq.java View File

@@ -21,6 +21,9 @@ public class SubmitProjectChangeApplyReq {
@ApiModelProperty("变更ID")
private Long id;

@ApiModelProperty("项目id")
private Long projectId;

@ApiModelProperty("变更原因")
private String changeReason;



+ 3
- 0
hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/vo/ProjectDetailVO.java View File

@@ -598,4 +598,7 @@ public class ProjectDetailVO {
@ApiModelProperty("资金下达情况")
private List<ProjectApprovalAmountDTO> approvalAmounts;

@ApiModelProperty("历史项目编码")
private String hisProjectCode;

}

+ 6
- 2
hz-pm-api/src/main/java/com/hz/pm/api/workbench/manage/WorkbenchManage.java View File

@@ -214,6 +214,7 @@ public class WorkbenchManage {
Project::getApprovalGovOwnFinanceAmount, Project::getApprovalGovSuperiorFinanceAmount)
.eq(Project::getProjectYear, req.getProjectYear())
.eq(req.getUnitStrip() != null, Project::getUnitStrip, req.getUnitStrip())
.ne(Project::getStatus, ProjectStatus.CHANGE_APPLY_PASSED.getCode())
.eq(Project::getNewest, Boolean.TRUE);
List<Long> viewUnitIds = mhUnitCache.getViewChildIdsRecursion(req.getUnitId());
projectQuery.in(Project::getBuildOrgCode, CollUtils.convert(viewUnitIds, String::valueOf));
@@ -356,6 +357,7 @@ public class WorkbenchManage {
.eq(Project::getProjectYear, req.getProjectYear())
.eq(req.getUnitStrip() != null, Project::getUnitStrip, req.getUnitStrip())
.eq(Project::getNewest, Boolean.TRUE)
.ne(Project::getStatus, ProjectStatus.CHANGE_APPLY_PASSED.getCode())
.exists(ExistsSqlConst.PROJECT_EXISTS_STATUS_CHANGE + " and npsc.event = {0}",
ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT)
.in(Project::getBuildOrgCode, CollUtils.convert(viewUnitIds, String::valueOf));
@@ -586,6 +588,7 @@ public class WorkbenchManage {
return PageVo.empty();
}
ProjectManageUtil.projectBaseQuery(query);
query.ne(Project::getStatus, ProjectStatus.CHANGE_APPLY_PASSED.getCode());
projectQueryByProjectStatusChange(query, ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT);
switch (req.getProcessNode()) {
case PROJECT_DECLARED:
@@ -664,8 +667,9 @@ public class WorkbenchManage {
if (query == null) {
return null;
}
query.select(Project::getProjectCode, Project::getProjectName,
Project::getBuildOrgCode, Project::getBuildOrgName);
query.ne(Project::getStatus, ProjectStatus.CHANGE_APPLY_PASSED.getCode())
.select(Project::getProjectCode, Project::getProjectName,
Project::getBuildOrgCode, Project::getBuildOrgName);
projectQueryByProjectStatusChange(query, ProjectStateChangeEvent.PROJECT_APPLICATION_SUBMIT);
switch (req.getProcessNode()) {
case PROJECT_DECLARED:


Loading…
Cancel
Save