@@ -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") | |||
@@ -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) { | |||
@@ -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)); | |||
@@ -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; | |||
@@ -26,4 +26,7 @@ public class DeclaredProgressStatisticsVO { | |||
@ApiModelProperty("未通过") | |||
private Long failedCount; | |||
@ApiModelProperty("待申报") | |||
private Long todoCount; | |||
} |
@@ -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) | |||
@@ -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") | |||
@@ -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); | |||
@@ -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) { | |||
@@ -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; | |||
@@ -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) { | |||
@@ -392,4 +392,7 @@ public class ProjectDTO implements Serializable { | |||
@ApiModelProperty("评审金额") | |||
private BigDecimal reviewAmount; | |||
@ApiModelProperty("历史项目编码") | |||
private String hisProjectCode; | |||
} |
@@ -506,4 +506,6 @@ public class Project implements Serializable { | |||
@ApiModelProperty("迭代升级内容") | |||
private String iterativeUpgradeContent; | |||
private String hisProjectCode; | |||
} |
@@ -86,6 +86,7 @@ public enum ProjectStatus implements IStatus<Integer, String> { | |||
*/ | |||
CHANGE(50000, "项目变更", 50000), | |||
ON_CHANGE_APPLY(50001, "项目变更中", 50000), | |||
CHANGE_APPLY_PASSED(50002, "已变更", 50000), | |||
/** | |||
* 项目阶段:已归档 | |||
@@ -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, "项目终止"); | |||
@@ -21,6 +21,9 @@ public class SubmitProjectChangeApplyReq { | |||
@ApiModelProperty("变更ID") | |||
private Long id; | |||
@ApiModelProperty("项目id") | |||
private Long projectId; | |||
@ApiModelProperty("变更原因") | |||
private String changeReason; | |||
@@ -598,4 +598,7 @@ public class ProjectDetailVO { | |||
@ApiModelProperty("资金下达情况") | |||
private List<ProjectApprovalAmountDTO> approvalAmounts; | |||
@ApiModelProperty("历史项目编码") | |||
private String hisProjectCode; | |||
} |
@@ -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: | |||