message) {
Project project = getProject(message);
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java
index 72bca96..bc506d6 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/common/statemachine/builder/impl/ProjectStateMachineBuilderImpl.java
@@ -6,7 +6,6 @@ import com.hz.pm.api.common.statemachine.event.ProjectStateChangeEvent;
import com.hz.pm.api.common.statemachine.factory.ProjectDeclareGuardFactory.PendingPreQualificationChoiceGuard;
import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
-import com.ningdatech.basic.exception.BizException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.BeanFactory;
@@ -187,31 +186,6 @@ public class ProjectStateMachineBuilderImpl implements BaseStateMachineBuilder applications,
- FileService fileService, String active) {
- return ProvincialProjectDTO.builder()
- //暂时先写死
- .operationManageUnit(StringUtils.isBlank(active) || BizConst.DEV.equals(active) ?
- "GO_a1479720291640b4982158fe3035a2d0" : projectInfo.getHigherSuperOrgCode())
- .digitalReform(String.valueOf(projectInfo.getBizDomain()))
- .regionCode(projectInfo.getAreaCode())
- .regionName(projectInfo.getArea())
- .projectName(projectInfo.getProjectName())
- .projectId(projectInfo.getProjectCode())
- .projectType(convertProjectType(projectInfo.getProjectType()))
- .totalMoney(projectInfo.getDeclareAmount())
- // TODO
- .yearBudget(BigDecimal.ZERO)
- .budgetFrom(checkAddBudget(projectInfo.getDeclareHaveAmount()
- , projectInfo.getDeclareGovOwnFinanceAmount(),
- projectInfo.getDeclareGovSuperiorFinanceAmount(),
- projectInfo.getDeclareBankLendingAmount(),
- projectInfo.getDeclareOtherAmount()))
- .year(String.valueOf(projectInfo.getProjectYear()))
- .financialCode(projectInfo.getFinancialCode())
- .developCode(projectInfo.getDevelopCode())
- .beginTime(projectInfo.getBeginTime())
- .endTime(projectInfo.getEndTime())
- .buildBasis("立项依据")
- .buildBasisFile(convertBasicFile(projectInfo.getBuildBasis(), fileService))
- .projectSummary(projectInfo.getProjectIntroduction())
- .responsibleMan(projectInfo.getResponsibleMan())
- .responsibleManPhone(projectInfo.getResponsibleManMobile())
- .contactName(projectInfo.getContactName())
- .contactPhone(projectInfo.getContactPhone())
- .buildUnit(projectInfo.getBuildOrgName())
- .buildUnitCode(StringUtils.isBlank(active) || BizConst.DEV.equals(active) ?
- "GO_a1479720291640b4982158fe3035a2d0" : projectInfo.getBuildOrgCode())
- .superUnit(projectInfo.getSuperOrg())
- .superUnitCode(StringUtils.isBlank(active) || BizConst.DEV.equals(active) ?
- "GO_a1479720291640b4982158fe3035a2d0" : projectInfo.getSuperOrgCode())
- .projectEstimateFile(convertFile(projectInfo.getCalculationTotalInvestmentFile(), fileService))
- .unitThreePlan(convertFile(projectInfo.getMainResponsibilitiesApplicantFile(), fileService))
- .otherFile(convertFile(projectInfo.getPreliminaryPlanFile(), fileService))
- .projectRemark(projectInfo.getProjectRemarks())
- .includeApplication(projectInfo.getIncludeApplication())
- .isEffective(1)
- .projectApplyFile(convertFile(projectInfo.getProjectApplicationForm(), fileService))
- .researchReport(convertFile(projectInfo.getPreliminaryPlanFile(), fileService))
- .applicationInfo(convertApplications(applications, fileService))
- .build();
+ private ApplicationConverter() {
+
}
private static Integer convertProjectType(String projectType) {
- if(StringUtils.isBlank(projectType)){
+ if (StringUtils.isBlank(projectType)) {
return null;
}
- if(Lists.newArrayList(ProjectTypeNewEnum.FIRST_BUILD.getCode(),
- ProjectTypeNewEnum.SJ_BUILD.getCode(),ProjectTypeNewEnum.SZ_BUILD.getCode()).contains(projectType)){
+ if (Lists.newArrayList(ProjectTypeNewEnum.FIRST_BUILD.getCode(),
+ ProjectTypeNewEnum.SJ_BUILD.getCode(), ProjectTypeNewEnum.SZ_BUILD.getCode()).contains(projectType)) {
return ProjectTypeEnum.RECONSTRUCTION.getCode();
- }else if(Lists.newArrayList(ProjectTypeNewEnum.NEW_OPERA.getCode(),
- ProjectTypeNewEnum.XU_OPERA.getCode()).contains(projectType)){
+ } else if (Lists.newArrayList(ProjectTypeNewEnum.NEW_OPERA.getCode(),
+ ProjectTypeNewEnum.XU_OPERA.getCode()).contains(projectType)) {
return ProjectTypeEnum.COMPREHENSIVE_INTEGRATION.getCode();
}
return null;
@@ -118,77 +60,6 @@ public class ApplicationConverter {
return sb.toString();
}
- //放入项目 app
- private static List convertApplications(List applications,
- FileService fileService) {
- if (CollUtil.isEmpty(applications)) {
- return Collections.emptyList();
- }
- return applications.stream().map(app -> convertApp(app, fileService)).collect(Collectors.toList());
- }
-
- private static ProvincialApplicationDTO convertApp(ProjectApplication projectApplication, FileService fileService) {
- return ProvincialApplicationDTO.builder()
- .clouds(convertCloud(projectApplication))
- .isFirst(projectApplication.getIsFirst())
- .applicationName((projectApplication.getApplicationName()))
- .applicationCode(StringUtils.isNotBlank(projectApplication.getAppCode()) ?
- projectApplication.getAppCode() : projectApplication.getRelatedExistsApplicationCode())
- .relatedExistsApplication(projectApplication.getRelatedExistsApplication())
- .applicationType(2)
- .buildLevel(projectApplication.getBuildLevel())
- .isUniteBuild(projectApplication.getIsUniteBuild())
- .unionBuildKind(projectApplication.getUnionBuildKind())
- .applicationSummary(projectApplication.getApplicationSummary())
- .applicationRemark(projectApplication.getApplicationRemark())
- .isFiveDomain(projectApplication.getIsDigitalModification())
- .fiveDomain(projectApplication.getDigitalModification())
- .bizDomain(projectApplication.getBizDomain())
- .isBizCooperate(projectApplication.getIsBizCooperate())
- .userRange(projectApplication.getUsesRangeRemark())
- .useGovCloud(projectApplication.getUseGovCloud())
- .nationalITSpec(projectApplication.getNationalItSpec())
- .netEnv(String.valueOf(projectApplication.getNetEnv()))
- .secrecyGrade(projectApplication.getSecrecyGrade())
- .passwordGrade(projectApplication.getPasswordGrade())
- .accountAppName(projectApplication.getAccountAppName())
- .brainAccountAppName(projectApplication.getDomainBrainAccount())
- .useCommonData(projectApplication.getUseCommonData())
- .dataName(projectApplication.getDataName())
- .commonComponents(projectApplication.getCommonComponents())
- .useCommonComponent(projectApplication.getUseCommonComponent())
- .isProduceCommonComponent(projectApplication.getProduceCommonComponent())
- .produceCommonComponent(projectApplication.getProduceCommonComponents())
- .publishSide(projectApplication.getPublishSide())
- .isS2(projectApplication.getIsAccountAppName())
- .accountAppName(projectApplication.getAccountAppName())
- .applicationEstimateFile(convertFile(projectApplication.getApplicationEstimateFile(), fileService))
- .cooperativeUnit(projectApplication.getBizCooperateInfo())
- .build();
- }
-
- private static String convertFile(String applicationEstimateFile, FileService fileService) {
- try {
- JSONArray jsonArrays = JSON.parseArray(applicationEstimateFile);
- List files = jsonArrays.stream().map(json -> {
- JSONObject fileJson = (JSONObject) JSON.toJSON(json);
- Long fileId = fileJson.getLong("id");
- String fileName = fileJson.getString("originalFileName");
- Map fileMap = fileService.findUrlById(Arrays.asList(fileId));
- String url = fileMap.get(fileId);
- url = removeExpire(url);
- FileDTO file = new FileDTO();
- file.setFileId(String.valueOf(fileId));
- file.setFileName(fileName);
- file.setAccessUrl(url);
- return file;
- }).collect(Collectors.toList());
- return JSON.toJSONString(files);
- } catch (Exception e) {
- log.info("转换省局上传 文件出错 {}", e.getMessage());
- }
- return null;
- }
/**
* 去除掉 oss链接的超时时间
@@ -204,42 +75,4 @@ public class ApplicationConverter {
return StringUtils.EMPTY;
}
- //立项依据的文件格式不一样
- private static String convertBasicFile(String applicationEstimateFile, FileService fileService) {
- try {
- List files = Lists.newArrayList();
- JSONArray jsonArrays = JSON.parseArray(applicationEstimateFile);
- jsonArrays.forEach(json -> {
- JSONObject fileJson = (JSONObject) JSON.toJSON(json);
- JSONArray fileList = fileJson.getJSONArray("fileList");
- fileList.forEach(f -> {
- JSONObject fJson = (JSONObject) JSON.toJSON(f);
- Long fileId = fJson.getLong("id");
- String fileName = fJson.getString("originalFileName");
- Map fileMap = fileService.findUrlById(Lists.newArrayList(fileId));
- String url = fileMap.get(fileId);
- url = removeExpire(url);
- FileDTO file = new FileDTO();
- file.setFileId(String.valueOf(fileId));
- file.setFileName(fileName);
- file.setAccessUrl(url);
- files.add(file);
- });
- });
- return JSON.toJSONString(files);
- } catch (Exception e) {
- log.info("转换省局上传 basic文件出错 {}", e.getMessage());
- }
- return null;
- }
-
- private static List convertCloud(ProjectApplication projectApplication) {
- return Lists.newArrayList(ProvincialApplicationDTO.Cloud.builder()
- .cloudType(projectApplication.getCloudsType())
- .cloudNums(projectApplication.getCloudsNumber())
- .cloudBasicSpec(projectApplication.getCloudsFoundationSpecifications())
- .cloudUseDescription(projectApplication.getCloudsDescription())
- .build());
- }
-
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionPlanManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionPlanManage.java
index f29db5d..f0a78aa 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionPlanManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ConstructionPlanManage.java
@@ -5,8 +5,6 @@ import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.hz.pm.api.common.enumeration.CommonEnum;
-import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.model.constant.CommonConst;
import com.hz.pm.api.common.statemachine.util.ProjectStateMachineUtil;
@@ -14,50 +12,35 @@ import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.ExcelExportStyle;
import com.hz.pm.api.projectdeclared.model.dto.ConstructionPlanExportDTO;
import com.hz.pm.api.projectdeclared.model.dto.ContructionSuggestionsDTO;
-import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO;
import com.hz.pm.api.projectdeclared.model.entity.ProjectConstructionSuggestions;
import com.hz.pm.api.projectdeclared.model.req.ConstrctionPlanListReq;
import com.hz.pm.api.projectdeclared.service.IConstructionSuggestionsService;
import com.hz.pm.api.projectlib.helper.ProjectHelper;
import com.hz.pm.api.projectlib.manage.ProjectLibManage;
-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.ProjectInst;
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.model.enumeration.ProjectTypeNewEnum;
+import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
import com.hz.pm.api.projectlib.service.IProjectInstService;
import com.hz.pm.api.projectlib.service.IProjectService;
-import com.hz.pm.api.staging.enums.MsgTypeEnum;
-import com.hz.pm.api.sys.manage.NoticeManage;
-import com.hz.pm.api.sys.manage.ProcessModelManage;
-import com.hz.pm.api.todocenter.constant.WorkNoticeConst;
import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.exception.BizException;
-import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.NdDateUtils;
-import com.wflow.bean.entity.WflowModels;
import com.wflow.exception.BusinessException;
-import com.wflow.workflow.bean.dto.OrgInfoDTO;
-import com.wflow.workflow.bean.vo.ProcessStartParamsVo;
-import com.wflow.workflow.service.ProcessInstanceService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.time.LocalDateTime;
-import java.util.Collections;
import java.util.List;
-import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -72,142 +55,13 @@ import java.util.stream.Collectors;
@RequiredArgsConstructor
public class ConstructionPlanManage {
- private final ProcessModelManage processModelManage;
private final IProjectService projectService;
- private final ProcessInstanceService processService;
private final ProjectStateMachineUtil projectStateMachineUtil;
private final IProjectInstService projectInstService;
private final ProjectLibManage projectLibManage;
- private final DefaultDeclaredProjectManage declaredProjectManage;
- private final DefaultDeclaredProjectManage defaultDeclaredProjectManage;
- private final NoticeManage noticeManage;
private final IConstructionSuggestionsService constructionSuggestionsService;
/**
- * 建设方案
- *
- * @param req \
- * @return \
- */
- @Transactional(rollbackFor = Exception.class)
- public synchronized String startTheProcess(DefaultDeclaredDTO req) {
- UserInfoDetails user = LoginUserUtil.loginUserDetail();
- Long userId = user.getUserId();
- ProjectDTO projectInfo = req.getProjectInfo();
- Long projectInfoId = projectInfo.getId();
- VUtils.isTrue(Objects.isNull(projectInfoId)).throwMessage("提交失败,缺少项目ID!");
- Project oldProject = projectService.getById(projectInfoId);
- VUtils.isTrue(StringUtils.isBlank(projectInfo.getConstructionPlanFile())).throwMessage("提交失败,请提交建设方案!");
-
- // 判断 项目当前状态 是不是 方案待申报
- VUtils.isTrue(!ProjectStatus.PLAN_TO_BE_DECLARED.eq(oldProject.getStatus()) ||
- !ProjectStatus.NOT_APPROVED.eq(oldProject.getStage()))
- .throwMessage("提交失败 该项目不是 方案待申报状态或者未立项阶段");
-
- projectInfo.setBuildOrgCode(user.getMhUnitIdStr());
- projectInfo.setBuildOrgName(user.getMhUnitName());
-
- // 项目名称去重
- if (StringUtils.isNotBlank(projectInfo.getProjectName()) && !projectInfo.getProjectName()
- .equals(oldProject.getProjectName())) {
- projectInfo.setProjectCode(oldProject.getProjectCode());
- defaultDeclaredProjectManage.checkDuplication(projectInfo);
- }
- //判断申报金额 是否等于总的 判断年度支付金额 是否等于总金额
- defaultDeclaredProjectManage.checkAmount(projectInfo);
-
- //如果主管单位没有 那么主管单位就是自己
- if (CommonEnum.NO.getCode().equals(projectInfo.getIsSuperOrg())) {
- projectInfo.setSuperOrgCode(user.getMhUnitIdStr());
- projectInfo.setSuperOrg(user.getMhUnitName());
- }
-
- Project constructProject = new Project();
- BeanUtils.copyProperties(projectInfo, constructProject);
- constructProject.setStatus(oldProject.getStatus());
- constructProject.setStage(oldProject.getStage());
- ProjectProcessStageEnum instType = ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS;
- WflowModels wflowModels = processModelManage.getWflowModels(instType, user.getMhUnitId());
- if (Objects.isNull(wflowModels)) {
- throw BizException.wrap("找不到建设申报流程配置");
- }
- //如果被禁用了的话 直接跳过 进入到下一个状态
- if (Boolean.TRUE.equals(wflowModels.getIsStop())) {
- //被禁用了 调2次状态机
- projectStateMachineUtil.pass(constructProject);
- projectStateMachineUtil.pass(constructProject);
- constructProject.setUpdateOn(LocalDateTime.now());
- projectService.updateById(constructProject);
- return "因为建设方案流程被禁用了 直接跳过!";
- }
-
- ProcessStartParamsVo params = new ProcessStartParamsVo();
- params.setUser(declaredProjectManage.buildUser(userId));
- params.setProcessUsers(Collections.emptyMap());
- //放入条件判断的项目字段
- //把条件值给放入工作流
- defaultDeclaredProjectManage.buildCondition(params, oldProject, req);
- // 获取发起单位、发起单位主管单位、发起单位上级条线主管单位信息
- Map orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(userId, constructProject);
- String instanceId = processService.startProcessLs(wflowModels, params, orgModelMap);
- log.info("建设方案项目申报成功 【{}】", instanceId);
-
- // 保存建设项目相关
- Project buildProject;
- if (Boolean.TRUE.equals(req.getRestart())) {
- //如果是重新提交 不用生成新版本 前面已经生成过了
- buildProject = contructionPlanModifyProject(oldProject, instanceId);
- } else {
- buildProject = projectLibManage.saveConstructProjectInDeclared(projectInfo, instanceId, userId, oldProject);
- }
-
- //发送给第一个审批人消息
- noticeManage.sendFirstUser(buildProject, wflowModels.getFormName(), instanceId,
- WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW);
-
- return instanceId;
- }
-
- private Project contructionPlanModifyProject(Project project, String instanceId) {
- projectStateMachineUtil.pass(project);
- project.setUpdateOn(LocalDateTime.now());
- project.setInstCode(instanceId);
- projectService.updateById(project);
-
- //保存项目和实例的关系
- ProjectInst projectInst = new ProjectInst();
- projectInst.setProjectId(project.getId());
- projectInst.setInstCode(instanceId);
- projectInst.setCreateOn(LocalDateTime.now());
- projectInst.setUpdateOn(LocalDateTime.now());
- projectInst.setInstType(ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS);
- projectInstService.save(projectInst);
-
- return project;
- }
-
- /**
- * 驳回 重新提交建设方案
- *
- * @param dto
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public String restartTheProcess(DefaultDeclaredDTO dto) {
- ProjectDTO projectDto = dto.getProjectInfo();
- VUtils.isTrue(Objects.isNull(projectDto.getId())).throwMessage("提交失败 缺少项目ID!");
- Project projectInfo = projectService.getById(projectDto.getId());
- VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!");
- VUtils.isTrue(StringUtils.isBlank(projectDto.getConstructionPlanFile())).throwMessage("提交失败 请提交建设方案!");
- //直接先到待方案审批
- Project project = projectLibManage.saveProjectWithVersionAndStatus(projectDto, null,
- ProjectStatus.PLAN_TO_BE_DECLARED.getCode(), Boolean.TRUE);
- dto.getProjectInfo().setId(project.getId());
- dto.setRestart(Boolean.TRUE);
- return startTheProcess(dto);
- }
-
- /**
* 提交建设方案项目 时 更新信息
*
* @param project
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java
index eedda81..ffa599a 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ProjectAdjustmentManage.java
@@ -1,9 +1,7 @@
package com.hz.pm.api.projectdeclared.manage;
-import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.common.util.ExcelExportStyle;
@@ -15,12 +13,10 @@ import com.hz.pm.api.projectlib.helper.ProjectHelper;
import com.hz.pm.api.projectlib.manage.ProjectLibManage;
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.ProjectApplication;
-import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
import com.hz.pm.api.projectlib.model.enumeration.ProjectTypeNewEnum;
+import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.vo.ProjectLibListItemVO;
-import com.hz.pm.api.projectlib.service.IProjectApplicationService;
import com.hz.pm.api.projectlib.service.IProjectService;
import com.hz.pm.api.user.security.model.UserFullInfoDTO;
import com.hz.pm.api.user.util.LoginUserUtil;
@@ -28,7 +24,6 @@ import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.NdDateUtils;
-import com.wflow.exception.BusinessException;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -38,7 +33,6 @@ import org.springframework.transaction.annotation.Transactional;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@@ -60,10 +54,6 @@ public class ProjectAdjustmentManage {
private final IProjectService projectService;
- private final IProjectApplicationService projectApplicationService;
-
- private final RestartProcessMapUtil reStartProcessMapUtil;
-
private final DefaultDeclaredProjectManage defaultDeclaredProjectManage;
private final ProjectLibManage projectLibManage;
@@ -102,38 +92,10 @@ public class ProjectAdjustmentManage {
return declaredFunction.apply(dto);
}
- private Boolean modifyProject(ProjectDTO projectDto) {
- //先修改项目信息
- Project project = new Project();
- BeanUtils.copyProperties(projectDto, project);
- project.setUpdateOn(LocalDateTime.now());
- if (!projectService.updateById(project)) {
- throw new BusinessException("项目调整失败");
- }
- //再修改应用信息
- if (CollUtil.isNotEmpty(projectDto.getApplicationList())) {
- //采取批量删除 批量添加的方式
- projectApplicationService.remove(Wrappers.lambdaQuery(ProjectApplication.class)
- .eq(ProjectApplication::getProjectId, project.getId()));
- //批量添加
- List applications = projectDto.getApplicationList().stream().map(application -> {
- ProjectApplication projectApplication = new ProjectApplication();
- BeanUtils.copyProperties(application, projectApplication);
- projectApplication.setProjectId(project.getId());
- projectApplication.setProjectCode(project.getProjectCode());
- projectApplication.setProjectVersion(project.getVersion());
- return projectApplication;
- }).collect(Collectors.toList());
- projectApplicationService.saveBatch(applications);
- }
- return Boolean.TRUE;
- }
-
private static final List PROJECT_STATUS = Arrays.asList(
ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(),
ProjectStatus.PREQUALIFICATION_FAILED.getCode(),
- ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode(),
- ProjectStatus.SCHEME_REVIEW_FAILED.getCode());
+ ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode());
/**
* 项目库
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByProvincialDeptManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByProvincialDeptManage.java
deleted file mode 100644
index ed74f8a..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewByProvincialDeptManage.java
+++ /dev/null
@@ -1,118 +0,0 @@
-package com.hz.pm.api.projectdeclared.manage;
-
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.hz.pm.api.projectdeclared.converter.ApplicationConverter;
-import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO;
-import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
-import com.hz.pm.api.projectlib.manage.ProjectLibManage;
-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.ProjectApplication;
-import com.hz.pm.api.projectlib.service.IProjectApplicationService;
-import com.hz.pm.api.projectlib.service.IProjectService;
-import com.hz.pm.api.provincial.service.IJoinReviewProvincialBureauService;
-import com.hz.pm.api.todocenter.constant.TodoCenterConst;
-import com.ningdatech.basic.function.VUtils;
-import com.ningdatech.file.service.FileService;
-import com.wflow.exception.BusinessException;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.stereotype.Component;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Objects;
-
-/**
- * @Classname ReviewByProvincialDeptManage
- * @Description 省级部门联审
- * @Date 2023/2/17 14:48
- * @Author PoffyZhang
- */
-@Component
-@Slf4j
-@RequiredArgsConstructor
-public class ReviewByProvincialDeptManage {
-
- private final IProjectService projectService;
-
- private final FileService fileService;
-
- private final IJoinReviewProvincialBureauService joinReviewProvincialBureauService;
-
- private final IProjectApplicationService applicationService;
-
- private final ProjectLibManage projectLibManage;
-
- @Value("${spring.profiles.active}")
- private String active;
-
- /**
- * 省级部门联审
- *
- * @param project
- * @return
- */
- @Transactional(rollbackFor = Exception.class)
- public Boolean startTheProcess(Project project) {
- VUtils.isTrue(Objects.isNull(project.getId())).throwMessage("提交失败 缺少项目ID!");
- Project projectInfo = projectService.getById(project.getId());
- VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!");
-
- //首先要判断 项目当前状态 是不是 省级部门联审
- VUtils.isTrue(!ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode().equals(projectInfo.getStatus()) ||
- !ProjectStatus.NOT_APPROVED.getCode().equals(projectInfo.getStage()))
- .throwMessage("提交失败 该项目不是 省级部门联审状态状态或者未立项阶段");
-
- // 对接省级联审的接口
- List applications = applicationService.list(Wrappers.lambdaQuery(ProjectApplication.class)
- .eq(ProjectApplication::getProjectId, projectInfo.getId()));
- if (joinReviewProvincialBureauService.pushImportProject(ApplicationConverter.convertProject(projectInfo, applications, fileService, active))) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }
-
- /**
- * 省级部门联审 重新提交
- *
- * @param declaringDTO \
- * @return \
- */
- @Transactional(rollbackFor = Exception.class)
- public String restartTheProcess(DefaultDeclaredDTO declaringDTO) {
- ProjectDTO project = declaringDTO.getProjectInfo();
- VUtils.isTrue(Objects.isNull(project.getId())).throwMessage("提交失败 缺少项目ID!");
- Project projectInfo = projectService.getNewProject(project.getId());
- VUtils.isTrue(Objects.isNull(projectInfo)).throwMessage("提交失败 此项目不存在!");
-
- //首先要判断 项目当前状态 是不是 省级部门联审不通过
- VUtils.isTrue(!ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode().equals(projectInfo.getStatus()) ||
- !ProjectStatus.NOT_APPROVED.getCode().equals(projectInfo.getStage()))
- .throwMessage("提交失败 该项目不是 省级部门联审不通过状态或者未立项阶段");
-
- // 对接省级联审的接口
- Project p = projectLibManage.saveProjectWithVersionAndStatus(project, null,
- ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode(), Boolean.FALSE);
-
- List applications = applicationService.list(Wrappers.lambdaQuery(ProjectApplication.class)
- .eq(ProjectApplication::getProjectId, p.getId()));
-
- //入库暂存表 后续处理 对接外部接口
- p.setUpdateOn(LocalDateTime.now());
- //保存一下 当前的主管单位发起人
- p.setPreStartUserId(p.getSponsor());
- //当前实例置为空
- p.setInstCode(TodoCenterConst.Declared.NULL_INST_CODE);
- declaringDTO.getProjectInfo().setId(p.getId());
- projectService.updateById(p);
- if (!joinReviewProvincialBureauService.pushImportProject(
- ApplicationConverter.convertProject(p, applications, fileService, active))) {
- throw new BusinessException("提交省级部门联审失败");
- }
-
- return String.valueOf(p.getId());
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewChecklistManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewChecklistManage.java
index a47ea5a..71d1e20 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewChecklistManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/manage/ReviewChecklistManage.java
@@ -69,7 +69,7 @@ public class ReviewChecklistManage {
//项目查最新
query.eq(Project::getNewest, Boolean.TRUE);
//建设方案提交后的状态
- query.ge(Project::getStatus, ProjectStatus.SCHEME_UNDER_REVIEW.getCode())
+ query.ge(Project::getStatus, null)
.ne(Project::getStatus, ProjectStatus.PLAN_TO_BE_DECLARED.getCode());
UserInfoDetails user = LoginUserUtil.loginUserDetail();
buildReviewCheckPermission(query, user);
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java
index 290d2b8..55f8b46 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectdeclared/utils/RestartProcessMapUtil.java
@@ -1,7 +1,8 @@
package com.hz.pm.api.projectdeclared.utils;
import com.google.common.collect.Maps;
-import com.hz.pm.api.projectdeclared.manage.*;
+import com.hz.pm.api.projectdeclared.manage.DeclaredProjectManage;
+import com.hz.pm.api.projectdeclared.manage.PrequalificationDeclaredProjectManage;
import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO;
import com.hz.pm.api.projectlib.manage.DeclaredRecordManage;
import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
@@ -24,22 +25,14 @@ public class RestartProcessMapUtil {
private static final Map> RESTART_PROCESS_MAP = Maps.newHashMap();
public RestartProcessMapUtil(DeclaredProjectManage declaredProjectManage,
- ConstructionPlanManage constructionPlanManage,
PrequalificationDeclaredProjectManage prequalificationDeclaredProjectManage,
- ReviewByProvincialDeptManage provincialDeptManage,
DeclaredRecordManage declaredRecordManage) {
//重新项目申报
RESTART_PROCESS_MAP.put(ProjectStatus.UNDER_INTERNAL_AUDIT_NOT_PASS.getCode(),
declaredProjectManage::reStartTheProcess);
- //建设方案
- RESTART_PROCESS_MAP.put(ProjectStatus.SCHEME_REVIEW_FAILED.getCode(),
- constructionPlanManage::restartTheProcess);
//预审方案
RESTART_PROCESS_MAP.put(ProjectStatus.PREQUALIFICATION_FAILED.getCode(),
prequalificationDeclaredProjectManage::restartTheProcess);
- //省级联审
- RESTART_PROCESS_MAP.put(ProjectStatus.THE_JOINT_REVIEW_OF_PROVINCIAL_DEPARTMENTS_FAILED.getCode(),
- provincialDeptManage::restartTheProcess);
// 立项备案重新提交
RESTART_PROCESS_MAP.put(ProjectStatus.DECLARED_APPROVED_RECORD_FAILED.getCode(),
declaredRecordManage::restartDeclaredRecord);
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/AnnualPlanController.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/AnnualPlanController.java
index 7826ba1..091638f 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/AnnualPlanController.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/AnnualPlanController.java
@@ -1,8 +1,5 @@
package com.hz.pm.api.projectlib.controller;
-import com.ningdatech.basic.model.PageVo;
-import com.ningdatech.log.annotation.WebLog;
-import com.hz.pm.api.projectlib.model.enumeration.ProjectLibFlagEnum;
import com.hz.pm.api.projectlib.manage.AnnualPlanLibManage;
import com.hz.pm.api.projectlib.model.dto.ProjectDTO;
import com.hz.pm.api.projectlib.model.req.ProjectApprovedReq;
@@ -10,11 +7,12 @@ import com.hz.pm.api.projectlib.model.req.ProjectIdReq;
import com.hz.pm.api.projectlib.model.req.ProjectListReq;
import com.hz.pm.api.projectlib.model.req.StartProjectDeclareReq;
import com.hz.pm.api.projectlib.model.vo.AnnualPlanListItemVO;
+import com.ningdatech.basic.model.PageVo;
+import com.ningdatech.log.annotation.WebLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
-import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
@@ -62,13 +60,6 @@ public class AnnualPlanController {
annualPlanLibManage.suspendAnnualPlan(req);
}
- @PostMapping("/importAnnualPlan")
- @ApiOperation("导入年度计划")
- @WebLog("导入年度计划")
- public void importAnnualPlan(@RequestParam("importFlag") ProjectLibFlagEnum importFlag, MultipartFile file) {
- annualPlanLibManage.importAnnualPlan(importFlag,file);
- }
-
@PostMapping("/modify")
@ApiOperation("年度计划编辑")
@WebLog("年度计划编辑")
@@ -83,11 +74,4 @@ public class AnnualPlanController {
annualPlanLibManage.exportList(param, response);
}
- @PostMapping("/exportModifyList")
- @ApiOperation("项目(增补)库编辑表导出")
- @WebLog("项目(增补)库编辑表导出")
- public void exportModifyList(@Valid @RequestBody ProjectListReq param, HttpServletResponse response) {
- annualPlanLibManage.exportModifyList(param, response);
- }
-
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectApplicationController.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectApplicationController.java
index b6af4d1..5dd918e 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectApplicationController.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/controller/ProjectApplicationController.java
@@ -1,15 +1,13 @@
package com.hz.pm.api.projectlib.controller;
-import com.ningdatech.basic.model.PageVo;
-import com.ningdatech.log.annotation.WebLog;
import com.hz.pm.api.projectlib.manage.ApplicationManage;
import com.hz.pm.api.projectlib.model.dto.ApplicationAppCodeSaveDTO;
-import com.hz.pm.api.projectlib.model.req.ProjectListReq;
-import com.hz.pm.api.projectlib.model.vo.ProjectDetailVO;
+import com.ningdatech.log.annotation.WebLog;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
+
import javax.validation.Valid;
/**
@@ -40,9 +38,4 @@ public class ProjectApplicationController {
return applicationManage.saveAppCode(dto);
}
- @GetMapping("/to-register-app-project-list")
- @ApiOperation("待应用预注册的项目应用列表")
- public PageVo toRegisterAppProjectLibList(ProjectListReq req) {
- return applicationManage.toRegisterAppProjectLibList(req);
- }
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/stage/ProjectApprovalHandle.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/stage/ProjectApprovalHandle.java
index 1b1926d..2b07e70 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/stage/ProjectApprovalHandle.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/handle/stage/ProjectApprovalHandle.java
@@ -63,7 +63,7 @@ public class ProjectApprovalHandle extends AbstractProcessHandle {
|| ProjectStatus.DECLARED_APPROVED_TO_BE_RECORD.eq(status)
|| ProjectStatus.DECLARED_APPROVED_RECORD_AUDITING.eq(status)) {
// 根据建设方案评审通过的时间获取
- final List events = Arrays.asList(ProjectStateChangeEvent.PLAN_REVIEW_PASS,
+ final List events = Arrays.asList(
ProjectStateChangeEvent.DECLARED_RECORD_SUBMIT,
ProjectStateChangeEvent.DECLARED_RECORD_RESUBMIT);
ProjectStatusChange projectStatusChange = projectStatusChangeService.getLastOne(projectIds, events);
@@ -73,7 +73,7 @@ public class ProjectApprovalHandle extends AbstractProcessHandle {
detail.setStepStatus(StepStatusEnum.ON_GOING);
} else {
// 取 状态机 改变状态时间
- final List events = Arrays.asList(ProjectStateChangeEvent.PLAN_REVIEW_PASS,
+ final List events = Arrays.asList(
ProjectStateChangeEvent.DECLARED_RECORD_FAILED,
ProjectStateChangeEvent.DECLARED_RECORD_PASS);
ProjectStatusChange projectStatusChange = projectStatusChangeService.getLastOne(projectIds, events);
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java
index 14117fd..447aaac 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/AnnualPlanLibManage.java
@@ -1,18 +1,8 @@
package com.hz.pm.api.projectlib.manage;
-import cn.afterturn.easypoi.excel.ExcelExportUtil;
-import cn.afterturn.easypoi.excel.ExcelImportUtil;
-import cn.afterturn.easypoi.excel.entity.ImportParams;
-import cn.afterturn.easypoi.excel.entity.TemplateExportParams;
import cn.hutool.core.bean.BeanUtil;
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.poi.excel.ExcelUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.toolkit.Assert;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.google.common.collect.Lists;
import com.hz.pm.api.common.enumeration.CommonEnum;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.model.constant.CommonConst;
@@ -23,13 +13,8 @@ import com.hz.pm.api.common.util.ExcelDownUtil;
import com.hz.pm.api.datascope.model.DataScopeDTO;
import com.hz.pm.api.datascope.utils.DataScopeUtil;
import com.hz.pm.api.projectlib.helper.ProjectHelper;
-import com.hz.pm.api.projectlib.model.dto.AnnualLibExportDTO;
-import com.hz.pm.api.projectlib.model.dto.AnnualLibImportDTO;
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.ProjectRenewalFundDeclaration;
-import com.hz.pm.api.projectlib.model.enumeration.ProjectLibFlagEnum;
-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.req.ProjectApprovedReq;
import com.hz.pm.api.projectlib.model.req.ProjectIdReq;
@@ -46,23 +31,14 @@ import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.CollUtils;
-import com.ningdatech.basic.util.StrPool;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.collections4.CollectionUtils;
-import org.apache.poi.ss.usermodel.Workbook;
-import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
-import java.io.*;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
import java.time.LocalDateTime;
import java.util.*;
-import java.util.stream.Collectors;
import static com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus.*;
@@ -90,7 +66,7 @@ public class AnnualPlanLibManage {
* 年度计划查询状态
*/
private static final List ANNUAL_PLAN_LIST_STATUS =
- Arrays.asList(IN_THE_ANNUAL_PLAN, SCHEME_UNDER_REVIEW, SCHEME_REVIEW_FAILED, TO_BE_APPROVED, TO_BE_DECLARED,
+ Arrays.asList(IN_THE_ANNUAL_PLAN, TO_BE_APPROVED, TO_BE_DECLARED,
PLAN_TO_BE_DECLARED, PENDING_PREQUALIFICATION_CHOICE, PROJECT_APPROVED, TO_BE_PURCHASED, UNDER_CONSTRUCTION,
ON_PILOT_RUNNING, ARCHIVED);
@@ -277,223 +253,4 @@ public class AnnualPlanLibManage {
}
- @Transactional(rollbackFor = Exception.class)
- public void importAnnualPlan(ProjectLibFlagEnum importFlag, MultipartFile file) {
- Long userId = LoginUserUtil.getUserId();
- ImportParams params = new ImportParams();
- // 标题行数
- params.setTitleRows(2);
- // 从第几行开始,因为第一、二个大标题被上面的参数给占了,所以不是5
- params.setHeadRows(3);
- // 表格数量
- params.setSheetNum(2);
- List list = null;
- try {
- list = ExcelImportUtil.importExcel(file.getInputStream(), AnnualLibImportDTO.class, params);
- } catch (Exception e) {
- throw new BizException(e.getMessage());
- }
- // 筛选出导入的新建项目
- List newList =
- list.stream().filter(d -> CommonConst.NEW_CONSTRUCTION.equals(d.getIsFirst())).collect(Collectors.toList());
- List projectList = newList.stream().map(n -> {
- Project project = new Project();
- assemblyProjectInfo(n, project);
- // 根据传入标志判断是否临时增补
- if (ProjectLibFlagEnum.ANNUAL_PLAN.equals(importFlag)) {
- project.setIsTemporaryAugment(CommonEnum.NO.getCode());
- } else if (ProjectLibFlagEnum.ANNUAL_PLAN_SUPPLEMENT.equals(importFlag)) {
- project.setIsTemporaryAugment(CommonEnum.YES.getCode());
- }
- project.setCreateBy(userId);
- project.setUpdateBy(userId);
- project.setCreateOn(LocalDateTime.now());
- project.setUpdateOn(LocalDateTime.now());
- return project;
- }).collect(Collectors.toList());
- // 保存到项目库中
- projectService.saveOrUpdateBatch(projectList);
-
- // 筛选出导入的续建项目
- List continuedList = list.stream()
- .filter(d -> CommonConst.CONTINUED_CONSTRUCTION.equals(d.getIsFirst())).collect(Collectors.toList());
- List renewalFundDeclarationList = continuedList.stream().map(c -> {
- ProjectRenewalFundDeclaration renewalFundDeclaration = new ProjectRenewalFundDeclaration();
- BeanUtils.copyProperties(c, renewalFundDeclaration);
- renewalFundDeclaration.setAnnualPaymentAmount(c.getAnnualPlanAmount());
- renewalFundDeclaration.setOtherAmount(c.getDeclareOtherAmount());
- renewalFundDeclaration.setApprovalStatus(ProjectRenewalApprovalStatusEnum.PENDING.name());
- renewalFundDeclaration.setCreateOn(LocalDateTime.now());
- renewalFundDeclaration.setUpdateOn(LocalDateTime.now());
- return renewalFundDeclaration;
- }).collect(Collectors.toList());
- // 保存到续建项目资金库中
- projectRenewalFundDeclarationService.saveBatch(renewalFundDeclarationList);
- }
-
- private void assemblyProjectInfo(AnnualLibImportDTO data, Project project) {
- Long projectId = data.getProjectId();
- // 从项目库中先查询出对应的项目ID的项目
- Project projectInfo = projectService.getById(projectId);
- if (Objects.nonNull(projectInfo)) {
- BeanUtils.copyProperties(projectInfo, project);
- } else {
- // 新增的年度计划库项目
- throw new BizException("项目库中不存在项目ID为:" + projectId + "的项目");
- }
- project.setId(data.getProjectId());
- project.setProjectName(data.getProjectName());
- project.setProjectIntroduction(data.getProjectIntroduction());
- // 建设依据忽略
- project.setIsFirst(CommonConst.NEW_CONSTRUCTION.equals(data.getIsFirst()) ? 1 : 0);
- String[] dataArr = data.getBuildCycle().split(CommonConst.ZHI);
- if (CollectionUtils.isEmpty(Arrays.asList(dataArr))) {
- throw new BizException("项目ID为:" + data.getProjectId() + "的建设起止年限格式不正确,请按照xx年xx月至xx年xx月的格式输入!");
- }
- project.setBeginTime(dataArr[0].trim());
- project.setEndTime(dataArr[1].trim());
- project.setDeclareAmount(data.getDeclaredAmount());
- // TODO 年度计划
- // project.setAnnualPlanAmount(data.getAnnualPlanAmount());
- project.setDeclareHaveAmount(data.getDeclareHaveAmount());
- project.setDeclareGovOwnFinanceAmount(data.getDeclareGovOwnFinanceAmount());
- project.setDeclareGovSuperiorFinanceAmount(data.getDeclareGovSuperiorFinanceAmount());
- project.setDeclareBankLendingAmount(data.getDeclareBankLendingAmount());
- project.setDeclareOtherAmount(data.getDeclareOtherAmount());
- project.setEngineeringSpeedOne(data.getFirstQuarter());
- project.setEngineeringSpeedTwo(data.getSecondQuarter());
- project.setEngineeringSpeedThree(data.getThirdQuarter());
- project.setEngineeringSpeedFour(data.getFourthQuarter());
- project.setBuildOrgName(data.getBuildUnitName());
- project.setContactName(data.getContactName());
- project.setResponsibleMan(data.getResponsibleMan());
- project.setProjectRemarks(data.getProjectRemarks());
- }
-
- public void exportModifyList(ProjectListReq param, HttpServletResponse response) {
- int year = LocalDateTime.now().getYear();
- Integer isTemporaryAugment = param.getIsTemporaryAugment();
- Assert.notNull(isTemporaryAugment, "请传入是否临时增补标志");
- param.setIsTemporaryAugment(isTemporaryAugment);
- String fileName;
- // 设置excel的文件名称和是否增补
- if (CommonEnum.NO.getCode().equals(isTemporaryAugment)) {
- fileName = "杭州市" + year + "年数字化项目年度计划库编辑表";
- } else if (CommonEnum.YES.getCode().equals(isTemporaryAugment)) {
- fileName = "杭州市" + year + "年数字化项目年度计划增补库编辑表";
- } else {
- throw BizException.wrap("是否临时增补标志无效");
- }
- LambdaQueryWrapper query = ProjectHelper.projectQuery(param);
- query.eq(Project::getNewest, Boolean.TRUE);
- query.eq(Project::getIsTemporaryAugment, isTemporaryAugment);
- query.orderByDesc(Project::getAnnualPlanAddTime);
- query.in(Project::getStatus, CollUtils.fieldList(ANNUAL_PLAN_LIST_STATUS, ProjectStatus::getCode));
- // 数据权限
- if (!buildProjectLibPermission(query)) {
- throw BizException.wrap("暂无年度计划导出权限");
- }
- List projects = projectService.list(query);
- List list = projects.stream().map(p -> {
- AnnualLibExportDTO dto = new AnnualLibExportDTO();
- BeanUtils.copyProperties(p, dto);
- String beginTime = p.getBeginTime();
- String begin = beginTime.replace(StrPool.DASH, CommonConst.YEAR);
- begin = begin + CommonConst.MONTH;
- String endTime = p.getEndTime();
- String end = endTime.replace(StrPool.DASH, CommonConst.YEAR);
- end = end + CommonConst.MONTH;
- String buildCycle = begin + CommonConst.ZHI + end;
- dto.setBuildCycle(buildCycle);
- dto.setProjectId(p.getId());
- dto.setDeclaredAmount(p.getDeclareAmount());
- dto.setBuildUnitName(p.getBuildOrgName());
- String buildBasis = p.getBuildBasis();
- List fileArray = JSON.parseArray(buildBasis, JSONObject.class);
- List nameList = CollUtils.fieldList(fileArray, w -> w.getString(CommonConst.TITLE)
- + StrPool.LEFT_BRACKET + w.getString(CommonConst.BASIS_FILE_NAME) + StrPool.RIGHT_BRACKET);
- String basis = String.join(StrPool.COMMA, nameList);
- dto.setBuildBasis(basis);
- if (CommonEnum.YES.getCode().equals(p.getIsFirst())) {
- dto.setIsFirst(CommonConst.NEW_CONSTRUCTION);
- } else if (CommonEnum.NO.getCode().equals(p.getIsFirst())) {
- dto.setIsFirst(CommonConst.CONTINUED_CONSTRUCTION);
- }
- dto.setFirstQuarter(p.getEngineeringSpeedOne());
- dto.setSecondQuarter(p.getEngineeringSpeedTwo());
- dto.setThirdQuarter(p.getEngineeringSpeedThree());
- dto.setFourthQuarter(p.getEngineeringSpeedFour());
- return dto;
- }).collect(Collectors.toList());
-
- int count = 0;
- for (AnnualLibExportDTO annualLibExportDTO : list) {
- count++;
- annualLibExportDTO.setSerialNumber(count);
- }
-
- // 获取本地目录的年度计划编辑表Excel模板
- File directory = new File("");
- String templateName = "丽水市" + year + "年数字化项目年度计划编辑表";
- String templatePath =
- directory.getAbsolutePath() + File.separator + "template" + File.separator + templateName + ".xls";
- TemplateExportParams temp = new TemplateExportParams(templatePath);
- temp.setSheetNum(new Integer[]{0, 1});
- temp.setSheetName(new String[]{"实施类(新建)", "实施类(续建)"});
- Map map = new HashMap<>(4);
- map.put("mapList", list);
- map.put("mapList1", Lists.newArrayList());
- Workbook workbook = ExcelExportUtil.exportExcel(temp, map);
- if (CollUtil.isEmpty(list)) {
- // 输出空模板
- // 获取本地目录的年度计划编辑表空Excel模板
- String emptyTemplate = "丽水市" + year + "年数字化项目年度计划编辑表(空)";
- String emptyTemplatePath = "template" + File.separator + emptyTemplate + ".xls";
- try (InputStream templateInputStream = this.getClass().getClassLoader().getResourceAsStream(emptyTemplatePath);
- OutputStream outputStream = response.getOutputStream()) {
- if (templateInputStream == null) {
- throw new BizException("读取模板失败!");
- }
- // 设置要下载的文件的名称
- response.setHeader("Content-disposition", "attachment;fileName=" + new String(templateName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1));
- // 设置文件的MIME类型
- response.setContentType("application/vnd.ms-excel;charset=UTF-8");
-
- byte[] b = new byte[2048];
- int len;
- while ((len = templateInputStream.read(b)) != -1) {
- outputStream.write(b, 0, len);
- }
- outputStream.flush();
- } catch (IOException e) {
- throw new BizException("读取模板失败!");
- }
- return;
- }
- if (workbook == null) {
- throw new BizException("读取编辑表模板失败!");
- }
- // 重置响应对象
- response.reset();
- try {
- response.setHeader("Content-disposition",
- "attachment;filename*=utf-8''" + URLEncoder.encode(Objects.requireNonNull(fileName), "UTF-8") + ".xls");
- } catch (UnsupportedEncodingException e) {
- log.error("年度计划导出异常:", e);
- throw BizException.wrap("年度计划导出异常");
- }
- response.setContentType(ExcelUtil.XLS_CONTENT_TYPE);
- response.setHeader("Pragma", "no-cache");
- response.setHeader("Cache-Control", "no-cache");
- response.setDateHeader("Expires", 0);
- // 写出数据输出流到页面
- try (OutputStream output = response.getOutputStream();
- BufferedOutputStream bos = new BufferedOutputStream(output)) {
- workbook.write(bos);
- bos.flush();
- } catch (IOException e) {
- log.error("年度计划导出异常:", e);
- throw BizException.wrap("年度计划导出异常");
- }
- }
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ApplicationManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ApplicationManage.java
index 16d6347..a585b64 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ApplicationManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ApplicationManage.java
@@ -1,29 +1,19 @@
package com.hz.pm.api.projectlib.manage;
-import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.hz.pm.api.common.model.constant.BizConst;
import com.hz.pm.api.common.util.HmacAuthUtil;
import com.hz.pm.api.projectlib.model.dto.ApplicationAppCodeSaveDTO;
-import com.hz.pm.api.projectlib.model.entity.Project;
import com.hz.pm.api.projectlib.model.entity.ProjectApplication;
-import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
-import com.hz.pm.api.projectlib.model.req.ProjectListReq;
-import com.hz.pm.api.projectlib.model.vo.ProjectApplicationVO;
-import com.hz.pm.api.projectlib.model.vo.ProjectDetailVO;
import com.hz.pm.api.projectlib.service.IProjectApplicationService;
import com.hz.pm.api.projectlib.service.IProjectService;
-import com.hz.pm.api.user.security.model.UserInfoDetails;
import com.hz.pm.api.user.util.LoginUserUtil;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.model.ApiResponse;
-import com.ningdatech.basic.model.PageVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
@@ -34,11 +24,8 @@ import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
import java.time.LocalDateTime;
-import java.util.Collections;
-import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.stream.Collectors;
/**
*
@@ -133,48 +120,4 @@ public class ApplicationManage {
throw new BizException("获取报告失败!");
}
- /**
- * 查询 待注册的
- *
- * @param req
- * @return
- */
- public PageVo toRegisterAppProjectLibList(ProjectListReq req) {
- UserInfoDetails user = LoginUserUtil.loginUserDetail();
- //建设单位 就是当前人的单位
- Page page = req.page();
- projectService.page(page, Wrappers.lambdaQuery(Project.class)
- .eq(Project::getStage, ProjectStatus.NOT_APPROVED.getCode())
- .eq(Project::getStatus, ProjectStatus.TO_BE_APP_REGISTER.getCode())
- .eq(Project::getBuildOrgCode, user.getMhUnitIdStr()));
- if (CollUtil.isEmpty(page.getRecords())) {
- return PageVo.empty();
- }
-
- List projectCodes = page.getRecords().stream().map(Project::getProjectCode).collect(Collectors.toList());
- //要去查询应用 此阶段 必定是 建设方案后的 所以直接查 建设方案的应用
- List apps = applicationService.list(Wrappers.lambdaQuery(ProjectApplication.class)
- .in(ProjectApplication::getProjectCode, projectCodes)
- .eq(ProjectApplication::getIsConstruct, Boolean.TRUE));
- Map> appMap = apps.stream().collect(Collectors.groupingBy(ProjectApplication::getProjectCode));
- List res = page.getRecords().stream().map(p -> {
- ProjectDetailVO vo = BeanUtil.copyProperties(p, ProjectDetailVO.class);
- if (appMap.containsKey(p.getProjectCode())) {
- List projectApplications = appMap.get(p.getProjectCode());
- vo.setProjectApplications(convert(projectApplications));
- }
- return vo;
- }).collect(Collectors.toList());
-
- return PageVo.of(res, page.getTotal());
- }
-
- private List convert(List projectApplications) {
- if (CollUtil.isNotEmpty(projectApplications)) {
- return projectApplications.stream()
- .map(a -> BeanUtil.copyProperties(a, ProjectApplicationVO.class))
- .collect(Collectors.toList());
- }
- return Collections.emptyList();
- }
}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java
index a25c2b0..92cc0da 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/manage/ProjectLibManage.java
@@ -8,7 +8,6 @@ import cn.hutool.core.util.NumberUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.xiaoymin.knife4j.core.util.StrUtil;
@@ -851,36 +850,7 @@ public class ProjectLibManage {
projectInstService.save(projectInst);
return project;
}
-
-
- /**
- * 建设方案申报项目时 保存项目信息和其它相关联的信息
- *
- * @param projectDto \
- * @param instanceId \
- * @param userId \
- * @param oldProject \
- * @return \
- */
- public Project saveConstructProjectInDeclared(ProjectDTO projectDto, String instanceId,
- Long userId, Project oldProject) {
-
- Project project = saveConstructProjectNewVersion(projectDto, instanceId, userId, oldProject);
- // 将旧的项目状态、阶段置为null,防止项目还会出现在待申报列表
- LambdaUpdateWrapper updateWrapper = Wrappers.lambdaUpdate(Project.class);
- updateWrapper.set(Project::getStage, null)
- .set(Project::getStatus, null)
- .eq(Project::getId, oldProject.getId());
- projectService.update(updateWrapper);
- //保存项目和实例的关系
- ProjectInst projectInst = new ProjectInst();
- projectInst.setProjectId(project.getId());
- projectInst.setInstCode(instanceId);
- projectInst.setInstType(ProjectProcessStageEnum.CONSTRUCTION_PROJECT_APPROVAL_PROCESS);
- projectInstService.save(projectInst);
- return project;
- }
-
+
/**
* 申报新项目时 保存项目信息和其它相关联的信息
*
@@ -950,68 +920,6 @@ public class ProjectLibManage {
}
/**
- * 建设方案申报项目时 保存项目信息和其它相关联的信息
- *
- * @param projectDto \
- * @param instanceId \
- * @param userId \
- * @param oldProject \
- * @return \
- */
- public Project saveConstructProjectNewVersion(ProjectDTO projectDto, String instanceId,
- Long userId, Project oldProject) {
- //流程启动之后 入库项目 重要业务信息 用于列表查询 展示
- try {
- Project project;
- //为空 代表是新申报的
- if (Objects.isNull(projectDto.getId())) {
- project = new Project();
- BeanUtils.copyProperties(projectDto, project);
- // 被撤回重新申报的项目,项目ID要置空
- project.setId(null);
- project.setCreateOn(LocalDateTime.now());
- project.setUpdateOn(LocalDateTime.now());
- project.setStage(ProjectStatus.NOT_APPROVED.getCode());
- project.setStatus(ProjectStatus.SCHEME_UNDER_REVIEW.getCode());
- project.setInstCode(instanceId);
- project.setSponsor(String.valueOf(userId));
- // 项目编号不变,版本号加1
- project.setProjectCode(oldProject.getProjectCode());
- project.setVersion(oldProject.getVersion() + 1);
- // 标记为建设方案申报
- project.setIsConstruct(Boolean.TRUE);
- project.setIsBackReject(Boolean.FALSE);
- // 保存初步方案项目ID
- if (Boolean.TRUE.equals(oldProject.getIsConstruct())) {
- // 重新提交
- project.setPrePlanProjectId(oldProject.getPrePlanProjectId());
- } else {
- project.setPrePlanProjectId(oldProject.getId());
- }
- if (projectService.save(project)) {
- saveApplication(projectDto, project, Boolean.TRUE);
- // 将旧的项目版本置为不是最新
- projectService.reverseNewest(project.getProjectCode(), project.getId());
- }
-
- } else {
- //否则是被驳回,重新提交的 新生成一个新版本的项目
- project = newProjectWithVersion(projectDto, Boolean.TRUE);
- if (Objects.nonNull(project)) {
- project.setInstCode(instanceId);
- project.setSponsor(String.valueOf(userId));
- projectService.updateById(project);
- }
- }
- return project;
- } catch (Exception e) {
- log.error("项目信息入库错误 " + e);
- throw new BusinessException("项目信息入库错误 :" + e);
- }
- }
-
-
- /**
* 在其它项目阶段 保存项目信息和其它相关联的信息
*
* @param projectDto \
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/AnnualLibExportDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/AnnualLibExportDTO.java
deleted file mode 100644
index 54dfb70..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/AnnualLibExportDTO.java
+++ /dev/null
@@ -1,102 +0,0 @@
-package com.hz.pm.api.projectlib.model.dto;
-
-import java.math.BigDecimal;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-
-import cn.afterturn.easypoi.excel.annotation.Excel;
-import lombok.Data;
-
-/**
- *
- * AnnualLibImportDTO
- *
- *
- * @author WendyYang
- * @since 13:46 2023/2/13
- */
-@Data
-public class AnnualLibExportDTO {
-
- @NotNull(message = "年度投资额不能为空")
- @Excel(name = "年度投资额",groupName = "2023年计划")
- private BigDecimal annualPlanAmount;
-
- @NotNull(message = "自由资金不能为空")
- @Excel(name = "自有资金",groupName = "资金来源")
- private BigDecimal declareHaveAmount;
- @Excel(name = "政府投资-本级财政资金")
- @NotNull(message = "政府投资-本级财政不能为空")
- private BigDecimal declareGovOwnFinanceAmount;
- @Excel(name = "政府投资-上级补助资金")
- @NotNull(message = "政府投资-上级补助资金不能为空")
- private BigDecimal declareGovSuperiorFinanceAmount;
- @Excel(name = "银行贷款")
- @NotNull(message = "银行贷款不能为空")
- private BigDecimal declareBankLendingAmount;
- @Excel(name = "其他")
- @NotNull(message = "其他不能为空")
- private BigDecimal declareOtherAmount;
-
- @Excel(name = "一季度",groupName = "进度和支付计划")
- @NotBlank(message = "一季度不能为空")
- private String firstQuarter;
- @Excel(name = "二季度")
- @NotBlank(message = "二季度不能为空")
- private String secondQuarter;
- @Excel(name = "三季度")
- @NotBlank(message = "三季度不能为空")
- private String thirdQuarter;
- @Excel(name = "四季度")
- @NotBlank(message = "四季度不能为空")
- private String fourthQuarter;
-
- @NotNull(message = "序号不能为空")
- @Excel(name = "序号")
- private Integer serialNumber;
-
- @Excel(name = "项目id")
- @NotNull(message = "项目ID不能为空")
- private Long projectId;
-
- @Excel(name = "项目名称")
- @NotBlank(message = "项目名称不能为空")
- private String projectName;
-
- @NotBlank(message = "建设内容不能为空")
- @Excel(name = "建设内容")
- private String projectIntroduction;
-
- @NotBlank(message = "建设依据不能为空")
- @Excel(name = "建设依据")
- private String buildBasis;
-
- @Excel(name = "建设性质")
- @NotBlank(message = "建设性质不能为空")
- private String isFirst;
-
- @Excel(name = "建设起止年限(填写到月)")
- @NotBlank(message = "建设起止年限不能为空")
- private String buildCycle;
-
- @NotBlank(message = "总投资不能为空")
- @Excel(name = "总投资")
- private BigDecimal declaredAmount;
-
- @Excel(name = "建设单位")
- @NotBlank(message = "建设单位不能为空")
- private String buildUnitName;
-
- @Excel(name = "项目联系人")
- @NotBlank(message = "项目联系人不能为空")
- private String contactName;
-
- @Excel(name = "项目分管领导")
- @NotBlank(message = "项目分管领导不能为空")
- private String responsibleMan;
-
- @Excel(name = "备注")
- private String projectRemarks;
-
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/AnnualLibImportDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/AnnualLibImportDTO.java
deleted file mode 100644
index a6f669c..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/dto/AnnualLibImportDTO.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.hz.pm.api.projectlib.model.dto;
-
-import cn.afterturn.easypoi.excel.annotation.Excel;
-import lombok.Data;
-
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-
-/**
- *
- * AnnualLibImportDTO
- *
- *
- * @author WendyYang
- * @since 13:46 2023/2/13
- */
-@Data
-public class AnnualLibImportDTO {
-
- @Excel(name = "项目进展",groupName = "到2022年底完成情况")
- @NotNull(message = "项目进展不能为空")
- private String projectProgress;
- @Excel(name = "累计投资")
- @NotNull(message = "累计投资不能为空")
- private BigDecimal cumulativeInvest;
-
- @NotNull(message = "年度投资额不能为空")
- @Excel(name = "年度投资额",groupName = "2023年计划")
- private BigDecimal annualPlanAmount;
-
- @NotNull(message = "自由资金不能为空")
- @Excel(name = "自有资金",groupName = "资金来源")
- private BigDecimal declareHaveAmount;
- @Excel(name = "政府投资-本级财政资金")
- @NotNull(message = "政府投资-本级财政不能为空")
- private BigDecimal declareGovOwnFinanceAmount;
- @Excel(name = "政府投资-上级补助资金")
- @NotNull(message = "政府投资-上级补助资金不能为空")
- private BigDecimal declareGovSuperiorFinanceAmount;
- @Excel(name = "银行贷款")
- @NotNull(message = "银行贷款不能为空")
- private BigDecimal declareBankLendingAmount;
- @Excel(name = "国家、省补助",groupName = "资金来源")
- @NotNull(message = "国家、省补助不能为空")
- private BigDecimal govSuperiorFinanceAmount;
- @Excel(name = "地方财政统筹")
- @NotNull(message = "地方财政统筹不能为空")
- private BigDecimal govOwnFinanceAmount;
- @Excel(name = "建设单位自筹")
- @NotNull(message = "建设单位自筹不能为空")
- private BigDecimal haveAmount;
- @Excel(name = "其他")
- @NotNull(message = "其他不能为空")
- private BigDecimal declareOtherAmount;
-
- @Excel(name = "一季度",groupName = "进度和支付计划")
- @NotBlank(message = "一季度不能为空")
- private String firstQuarter;
- @Excel(name = "二季度")
- @NotBlank(message = "二季度不能为空")
- private String secondQuarter;
- @Excel(name = "三季度")
- @NotBlank(message = "三季度不能为空")
- private String thirdQuarter;
- @Excel(name = "四季度")
- @NotBlank(message = "四季度不能为空")
- private String fourthQuarter;
-
- @NotNull(message = "序号不能为空")
- @Excel(name = "序号")
- private Integer serialNumber;
-
- @Excel(name = "项目id")
- @NotNull(message = "项目ID不能为空")
- private Long projectId;
-
- @Excel(name = "项目名称")
- @NotBlank(message = "项目名称不能为空")
- private String projectName;
-
- @NotBlank(message = "建设内容不能为空")
- @Excel(name = "建设内容")
- private String projectIntroduction;
-
- @NotBlank(message = "建设依据不能为空")
- @Excel(name = "建设依据")
- private String buildBasis;
-
- @Excel(name = "建设性质")
- @NotBlank(message = "建设性质不能为空")
- private String isFirst;
-
- @Excel(name = "建设周期")
- @NotBlank(message = "建设周期不能为空")
- private String constructionCycle;
-
- @Excel(name = "建设起止年限(填写到月)")
- @NotBlank(message = "建设起止年限不能为空")
- private String buildCycle;
-
- @NotBlank(message = "总投资不能为空")
- @Excel(name = "总投资")
- private BigDecimal declaredAmount;
-
- @Excel(name = "建设单位")
- @NotBlank(message = "建设单位不能为空")
- private String buildUnitName;
-
- @Excel(name = "项目联系人")
- @NotBlank(message = "项目联系人不能为空")
- private String contactName;
-
- @Excel(name = "项目分管领导")
- @NotBlank(message = "项目分管领导不能为空")
- private String responsibleMan;
-
- @Excel(name = "备注")
- private String projectRemarks;
-
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java
index 9ad9481..0b673ce 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/projectlib/model/enumeration/status/ProjectStatus.java
@@ -37,15 +37,12 @@ public enum ProjectStatus implements IStatus {
DEPARTMENT_JOINT_REVIEW_FAILED(10009, "部门联审不通过", null),
IN_THE_ANNUAL_PLAN(10010, "年度计划中", null),
BE_SUSPENDED(10011, "被暂缓", null),
- SCHEME_UNDER_REVIEW(10012, "方案评审中", GovProjectStatusEnum.APPROVAL),
- SCHEME_REVIEW_FAILED(10013, "方案评审不通过", null),
TO_BE_APPROVED(10014, "待立项批复", GovProjectStatusEnum.PENDING),
TO_BE_DECLARED(10015, "待申报", null),
PLAN_TO_BE_DECLARED(10016, "方案待申报", null),
PENDING_PREQUALIFICATION_CHOICE(10017, "待预审选择态", null),
PREQUALIFICATION_WITHDRAW_CHOICE(10019, "预审中撤回选择态", null),
APPROVED_AFTER_CHOICE(10020, "立项批复后选择态", null),
- TO_BE_APP_REGISTER(10021, "待应用注册", null),
/**
* 信产项目备案
*/
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/contants/ProvincialContant.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/contants/ProvincialContant.java
deleted file mode 100644
index 4b41855..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/contants/ProvincialContant.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package com.hz.pm.api.provincial.contants;
-
-/**
- * @Classname ProvincialContant
- * @Description
- * @Date 2023/9/6 9:16
- * @Author PoffyZhang
- */
-public interface ProvincialContant {
-
- class OssUpload {
- public static final String OSS_UPLOAD_URL = "https://pms.zj.gov.cn/prometheus-zhejiang_file_service/api/v1/file/uploadFile";
- public static final String MEDIA_TYPE = "multipart/form-data";
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/controller/TestController.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/controller/TestController.java
deleted file mode 100644
index 4a0d75c..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/controller/TestController.java
+++ /dev/null
@@ -1,62 +0,0 @@
-package com.hz.pm.api.provincial.controller;
-
-import com.hz.pm.api.projectdeclared.manage.ReviewByProvincialDeptManage;
-import com.hz.pm.api.projectlib.model.entity.Project;
-import com.hz.pm.api.provincial.model.res.SjApiResponse;
-import com.hz.pm.api.provincial.service.IJoinReviewProvincialBureauService;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-
-import javax.validation.Valid;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * @Classname TestController
- * @Description
- * @Date 2023/3/2 15:08
- * @Author PoffyZhang
- */
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-@RequestMapping("/api/v1/test")
-@Api(tags = "测试省局接口")
-public class TestController {
-
- private final IJoinReviewProvincialBureauService joinReviewProvincialBureauService;
- private final ReviewByProvincialDeptManage provincialDeptManage;
-
- @GetMapping("/push")
- @ApiOperation("测试推送")
- public Boolean push(@Valid @RequestParam Long projectId) {
- Project project = new Project();
- project.setId(projectId);
- return provincialDeptManage.startTheProcess(project);
- }
-
- @GetMapping("/detail")
- @ApiOperation("测试获取详情")
- public SjApiResponse detail(@RequestParam String projectId) {
- return joinReviewProvincialBureauService.processInfo(projectId);
- }
-
- @GetMapping("/path")
- @ApiOperation("测试获取详情")
- public String path() throws IOException {
- InputStream in = this.getClass().getResourceAsStream("/template/simsun.ttc");
- StringBuilder sb = new StringBuilder();
- int n;
- while ((n = in.read()) != -1) {
- sb.append((char) n);
- }
-
- return sb.toString();
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/enumeration/ProjectProvincialAuditStatusEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/enumeration/ProjectProvincialAuditStatusEnum.java
deleted file mode 100644
index 7bb30f7..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/enumeration/ProjectProvincialAuditStatusEnum.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package com.hz.pm.api.provincial.enumeration;
-
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.Getter;
-import lombok.NoArgsConstructor;
-
-/**
- * @Classname ProjectProvincialAuditStatusEnum
- * @Description
- * @Date 2023/3/16 11:04
- * @Author PoffyZhang
- */
-@Getter
-@NoArgsConstructor
-@AllArgsConstructor
-public enum ProjectProvincialAuditStatusEnum {
- /**
- * 省级联审的状态
- */
- NOT_AUDIT(0,"未审核"),
- AUDITING(1,"审核中"),
- SUCCESS(2,"审核通过"),
- FAIL(3,"审核不通过"),
- WITHDRAW(4,"被撤回"),
- BACK(5,"退回地市");
-
- private Integer code;
- private String desc;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/manage/ProvincialManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/manage/ProvincialManage.java
deleted file mode 100644
index 43c3e31..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/manage/ProvincialManage.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package com.hz.pm.api.provincial.manage;
-
-import com.alibaba.fastjson.JSON;
-import com.ningdatech.basic.exception.BizException;
-import com.hz.pm.api.common.util.CommonInputStreamResource;
-import com.hz.pm.api.provincial.contants.ProvincialContant;
-import com.hz.pm.api.provincial.model.res.OssApiData;
-import com.hz.pm.api.provincial.model.res.OssApiResponse;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.*;
-import org.springframework.stereotype.Component;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
-import java.io.ByteArrayInputStream;
-import java.util.Objects;
-
-/**
- * @Classname ProvincialManage
- * @Description
- * @Date 2023/9/6 9:08
- * @Author PoffyZhang
- */
-@Component
-@RequiredArgsConstructor
-@Slf4j
-public class ProvincialManage {
-
- public static String uploadToOss(byte[] fileBytes,String fileName) {
- String url = ProvincialContant.OssUpload.OSS_UPLOAD_URL;
- MultiValueMap params = new LinkedMultiValueMap<>();
- ByteArrayInputStream inputStream = new ByteArrayInputStream(fileBytes);
- CommonInputStreamResource commonInputStreamResource = new CommonInputStreamResource(inputStream, fileBytes.length, fileName);
- params.add("file", commonInputStreamResource);
- RestTemplate restTemplate = new RestTemplate();
- HttpHeaders headers = new HttpHeaders();
- MediaType type = MediaType.parseMediaType(ProvincialContant.OssUpload.MEDIA_TYPE);
- headers.setContentType(type);
- HttpEntity formEntity = new HttpEntity(params, headers);
- ResponseEntity res = restTemplate.postForEntity(url, formEntity, OssApiResponse.class);
- log.info("oss res :{}", res);
- OssApiResponse body = res.getBody();
- if(Objects.isNull(body)){
- throw new BizException("上传省局oss请求失败");
- }
-
- if(HttpStatus.OK.value() != body.getRespCode()){
- throw new BizException("上传省局oss失败:" + body.getRespMsg());
- }
-
- OssApiData ossApiData = JSON.parseObject(JSON.toJSONString(body.getData()), OssApiData.class);
-
- return ossApiData.getAccessUrl();
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/FileDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/FileDTO.java
deleted file mode 100644
index c6a55cc..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/FileDTO.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package com.hz.pm.api.provincial.model.dto;
-
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-/**
- * @Classname FileDTO
- * @Description
- * @Date 2023/4/13 9:55
- * @Author PoffyZhang
- */
-@Data
-public class FileDTO {
-
- @ApiModelProperty("文件id")
- private String fileId;
-
- @ApiModelProperty("文件名")
- private String fileName;
-
- @ApiModelProperty("url")
- private String accessUrl;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProcessCommentDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProcessCommentDTO.java
deleted file mode 100644
index b6b4ef1..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProcessCommentDTO.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.hz.pm.api.provincial.model.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Builder;
-import lombok.Data;
-
-/**
- * @Classname ProcessCommentDTO
- * @Description
- * @Date 2023/3/2 15:25
- * @Author PoffyZhang
- */
-@Data
-@Builder
-@ApiModel(value = "ProcessCommentDTO", description = "省局返回流程审核详情")
-public class ProcessCommentDTO {
-
- @ApiModelProperty("任务id")
- private String taskId;
-
- @ApiModelProperty("comment")
- private String comment;
-
- @ApiModelProperty("流程步骤")
- private String stepName;
-
- @ApiModelProperty("审批状态")
- private String status;
-
- @ApiModelProperty("审批人")
- private String label;
-
- @ApiModelProperty("时间")
- private String approverTime;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvinceApiResponse.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvinceApiResponse.java
deleted file mode 100644
index e2716ee..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvinceApiResponse.java
+++ /dev/null
@@ -1,121 +0,0 @@
-package com.hz.pm.api.provincial.model.dto;
-
-import com.ningdatech.basic.enumeration.Status;
-import com.ningdatech.basic.model.ApiStatus;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- *
- * ApiResponse - 统一的接口返回值封装
- *
- *
- * @author WendyYang
- * @since 14:29 2022/9/29
- */
-@Data
-@NoArgsConstructor
-public class ProvinceApiResponse implements Serializable {
- private static final long serialVersionUID = 532384723325394156L;
-
- public static final int SUCCESS_CODE = 200;
-
- public static final String SUCCESS_MSG = "success";
-
- public static final int ERROR_CODE = 500;
-
- public static final String ERROR_MSG = "Internal server error";
-
- /**
- * 状态码
- */
- private Integer code;
-
- /**
- * 返回内容
- */
- private String message;
- private String msg;
-
- /**
- * 返回数据
- */
- private T data;
-
- /**
- * 全参构造函数
- *
- * @param code 状态码
- * @param message 返回内容
- * @param data 返回数据
- */
- private ProvinceApiResponse(Integer code, String message, T data) {
- this.code = code;
- this.message = message;
- this.data = data;
- }
-
- /**
- * 构造一个自定义的API返回
- *
- * @param code 状态码
- * @param message 返回内容
- * @param data 返回数据
- * @return ApiResponse
- */
- public static ProvinceApiResponse of(Integer code, String message, T data) {
- return new ProvinceApiResponse<>(code, message, data);
- }
-
- /**
- * 构造一个成功且不带数据的API返回
- *
- * @return ApiResponse
- */
- public static ProvinceApiResponse ofSuccess() {
- return ofSuccess(null);
- }
-
- /**
- * 构造一个成功且带数据的API返回
- *
- * @param data 返回数据
- * @return ApiResponse
- */
- public static ProvinceApiResponse ofSuccess(T data) {
- return ofStatus(Status.OK, data);
- }
-
- /**
- * 构造一个成功且自定义消息的API返回
- *
- * @param message 返回内容
- * @return ApiResponse
- */
- public static ProvinceApiResponse ofMessage(String message) {
- return of(Status.OK.getCode(), message, null);
- }
-
- /**
- * 构造一个有状态的API返回
- *
- * @param status 状态 {@link Status}
- * @return ApiResponse
- */
- public static ProvinceApiResponse ofStatus(ApiStatus status) {
- return ofStatus(status, null);
- }
-
- /**
- * 构造一个有状态且带数据的API返回
- *
- * @param status 状态 {@link Status}
- * @param data 返回数据
- * @return ApiResponse
- */
- public static ProvinceApiResponse ofStatus(ApiStatus status, T data) {
- return of(status.getCode(), status.getReasonPhrase(), data);
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvincialApplicationDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvincialApplicationDTO.java
deleted file mode 100644
index 02aa5cd..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvincialApplicationDTO.java
+++ /dev/null
@@ -1,103 +0,0 @@
-package com.hz.pm.api.provincial.model.dto;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import lombok.Builder;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @Classname ProvincialApplicationDTO
- * @Description
- * @Date 2023/3/2 10:06
- * @Author PoffyZhang
- */
-@Data
-@Builder
-@ApiModel(value = "ProvincialApplicationDTO")
-public class ProvincialApplicationDTO implements Serializable {
-
-
- //云 信息
- private List clouds;
- //是否初次建设 1是 2不是
- private Integer isFirst;
- //应用名称
- private String applicationName;
- //关联 关联的IRS应用code
- private String applicationCode;
- //关联的IRS应用name
- private String relatedExistsApplication;
- //1: '办公类系统',2: '业务应用类系统',3: '门户网站',4: '宣传微博/微信公众号',5: '硬件类系统',6: '工具类系统',99: '其他'
- private Integer applicationType;
- //建设层级 1:国家 2:省级 3:市级 4:县(市、区)
- private Integer buildLevel;
- //是否统建 0:否 1:是
- private Integer isUniteBuild;
- //统建类型 1:全省统建 2:全市统建
- private Integer unionBuildKind;
- //应用简介
- private String applicationSummary;
- //应用备注
- private String applicationRemark;
- //应用总投资测算明细
- private String applicationEstimateFile;
- //是否数改系统 0:否 1:是
- private Integer isFiveDomain;
- //1: '党政机关整体智治',2: '数字政府',3: '数字经济',4: '数字社会',7: '数字文化',5: '数字法治',6: '一体化智能化公共数据平台', 8: '基层智治' 多个用英文,分隔
- private String fiveDomain;
- //业务领域
- private String bizDomain;
- //否涉及业务协同 0:否 1:是
- private Integer isBizCooperate;
- //协同单位111111
- private String cooperativeUnit;
- //用户范围 0: '机关事业单位人员','0-1': '跨部门跨系统','0-2': '系统内地方各级','0-3': '本部门本级','0-4': '处室内部','0-6': '主管处室内部','0-5': '其他',1: '企业', 2: '社会公众',3: '其他' 多个用英文,分隔
- private String userRange;
- //是否使用政务云资源 1使用
- private Integer useGovCloud;
- //是否符合国家信息技术应用创新相关规范 0:否 1:是
- private Integer nationalITSpec;
- //网络环境 1:政务内网 2:政务外网 3:互联网 4:业务专网 5:单机
- private String netEnv;
- //等保级别 1:一级 2:二级 3:三级 4:四级 5:五级
- private Integer secrecyGrade;
- //密码测评级别 1:一级 2:二级 3:三级 4:四级 5:五级
- private Integer passwordGrade;
- //是否是S2 0:否 1:是
- private Integer isS2;
- //一本账应用名称
- private String accountAppName;
- //领域”大脑”一本帐名称
- private String brainAccountAppName;
- //是否使用公共数据
- private Integer useCommonData;
- //使用的公共数据名称
- private String dataName;
- //使用公共组件的名称
- private String commonComponents;
- //是否使用公共组件
- private Integer useCommonComponent;
- //是否产生公共组件
- private Integer isProduceCommonComponent;
- //产生的组件名称
- private String produceCommonComponent;
- //发布端 '浙里办','浙政钉','数字化改革门户','支付宝','微信','网页','PC客户端','APP端'
- private String publishSide;
-
- @Builder
- @Data
- @JsonIgnoreProperties(value = {"handler"})
- public static class Cloud implements Serializable {
- //云资源台数 11
- private Integer cloudNums;
- //云资源类型 云服务器(ECS)
- private String cloudType;
- //云资源规格 1核8G
- private String cloudBasicSpec;
- //云资源描述
- private String cloudUseDescription;
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvincialProjectDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvincialProjectDTO.java
deleted file mode 100644
index bdc1cf3..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/dto/ProvincialProjectDTO.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package com.hz.pm.api.provincial.model.dto;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * @Classname ProvincialProjectDTO
- * @Description
- * @Date 2023/3/2 10:06
- * @Author PoffyZhang
- */
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel(value = "ProvincialProjectDTO", description = "")
-public class ProvincialProjectDTO implements Serializable {
-
- @ApiModelProperty("区域code")
- private String regionCode;
-
- @ApiModelProperty("区域名称")
- private String regionName;
-
- @ApiModelProperty("数字化改革系统 可以多选 1: '党政机关整体智治',2: '数字政府',3: '数字经济',4: '数字社会',7: '数字文化',5: '数字法治',6: '一体化智能化公共数据平台',8: '基层智治'")
- private String digitalReform;
-
- @ApiModelProperty("业务主管单位浙政钉code,多个单位用英文;组成字符串。数据通过接口-查询省本级业务主管单位获取对应数据")
- private String operationManageUnit;
-
- @ApiModelProperty("重大项目名称")
- private String projectName;
-
- @ApiModelProperty("重大项目code 21位")
- private String projectId;
-
- @ApiModelProperty("项目类型 1新建 2续建")
- private Integer projectType;
-
- @ApiModelProperty("项目总投资(万元)")
- private BigDecimal totalMoney;
-
- @ApiModelProperty("项目年度预算(万元)")
- private BigDecimal yearBudget;
-
- @ApiModelProperty("自有资金,政府投资-本级财政资金,政府投资-上级补助资金")
- private String budgetFrom;
-
- @ApiModelProperty("预算年度 2023")
- private String year;
-
- @ApiModelProperty("财政code 32")
- private String financialCode;
-
- @ApiModelProperty("发改code 23")
- private String developCode;
-
- @ApiModelProperty("开始时间 比如2022-11-18")
- private String beginTime;
-
- @ApiModelProperty("结束时间 比如2022-12-13")
- private String endTime;
-
- @ApiModelProperty("立项依据1111")
- private String buildBasis;
-
- @ApiModelProperty("立项依据材料 [{\"fileId\":\"\"}]")
- private String buildBasisFile;
-
- @ApiModelProperty("项目概述")
- private String projectSummary;
-
- @ApiModelProperty("负责人")
- private String responsibleMan;
-
- @ApiModelProperty("联系人联系方式")
- private String responsibleManPhone;
-
- @ApiModelProperty("联系人")
- private String contactName;
-
- @ApiModelProperty("联系人联系方式")
- private String contactPhone;
-
- @ApiModelProperty("建设单位 比如财政局")
- private String buildUnit;
-
- @ApiModelProperty("建设单位浙政钉code")
- private String buildUnitCode;
-
- @ApiModelProperty("主管单位")
- private String superUnit;
-
- @ApiModelProperty("主管单位浙政钉code")
- private String superUnitCode;
-
- @ApiModelProperty("可研报告文件")
- private String researchReport;
-
- @ApiModelProperty("项目申报书")
- private String projectApplyFile;
-
- @ApiModelProperty("项目总投资测算明细")
- private String projectEstimateFile;
-
- @ApiModelProperty("申报单位主要职责")
- private String unitThreePlan;
-
- @ApiModelProperty("其他附件")
- private String otherFile;
-
- @ApiModelProperty("项目备注111")
- private String projectRemark;
-
- @ApiModelProperty("是否有效 1有效 2无效 3撤回")
- private Integer isEffective;
-
- @ApiModelProperty("是否包含应用 1包含")
- private Integer includeApplication;
-
- @ApiModelProperty("app信息")
- private List applicationInfo;
-
- @ApiModelProperty("条线单位 先写死")
- private String lineManageUnit;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/OssApiData.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/OssApiData.java
deleted file mode 100644
index dd94e92..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/OssApiData.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.hz.pm.api.provincial.model.res;
-
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- *
- * OssApiResponse -
- *
- *
- * @author ZPF
- * @since 14:29 2022/9/29
- */
-@Data
-@NoArgsConstructor
-public class OssApiData implements Serializable {
-
- private String fileId;
-
- private String fileName;
-
- private String accessUrl;
-
- private Long fileSize;
-
- private String uploadUserCode;
-
- private String ossObject;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/OssApiResponse.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/OssApiResponse.java
deleted file mode 100644
index 33f9ca9..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/OssApiResponse.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.hz.pm.api.provincial.model.res;
-
-import com.ningdatech.basic.enumeration.Status;
-import com.ningdatech.basic.model.ApiStatus;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- *
- * OssApiResponse -
- *
- *
- * @author ZPF
- * @since 14:29 2022/9/29
- */
-@Data
-@NoArgsConstructor
-public class OssApiResponse implements Serializable {
- private static final long serialVersionUID = 1L;
-
- public static final int SUCCESS_CODE = 200;
-
- public static final String SUCCESS_MSG = "成功";
-
- public static final int ERROR_CODE = 500;
-
- public static final String ERROR_MSG = "Internal server error";
-
- /**
- * 状态码
- */
- private Integer respCode;
-
- /**
- * 返回描述
- */
- private String respMsg;
-
- /**
- * 返回数据
- */
- private T data;
-
- /**
- * 全参构造函数
- *
- * @param respCode 状态码
- * @param respMsg 返回内容
- * @param data 返回数据
- */
- private OssApiResponse(Integer respCode, String respMsg, T data) {
- this.respCode = respCode;
- this.respMsg = respMsg;
- this.data = data;
- }
-
- /**
- * 构造一个自定义的API返回
- *
- * @param respCode 状态码
- * @param respMsg 返回内容
- * @param data 返回数据
- * @return ApiResponse
- */
- public static OssApiResponse of(Integer respCode, String respMsg, T data) {
- return new OssApiResponse<>(respCode, respMsg, data);
- }
-
- /**
- * 构造一个成功且不带数据的API返回
- *
- * @return ApiResponse
- */
- public static OssApiResponse ofSuccess() {
- return ofSuccess(null);
- }
-
- /**
- * 构造一个成功且带数据的API返回
- *
- * @param data 返回数据
- * @return ApiResponse
- */
- public static OssApiResponse ofSuccess(T data) {
- return ofStatus(Status.OK, data);
- }
-
- /**
- * 构造一个成功且自定义消息的API返回
- *
- * @param msg 返回内容
- * @return ApiResponse
- */
- public static OssApiResponse ofMessage(String msg) {
- return of(Status.OK.getCode(), msg, null);
- }
-
- /**
- * 构造一个有状态的API返回
- *
- * @param status 状态 {@link Status}
- * @return ApiResponse
- */
- public static OssApiResponse ofStatus(ApiStatus status) {
- return ofStatus(status, null);
- }
-
- /**
- * 构造一个有状态且带数据的API返回
- *
- * @param status 状态 {@link Status}
- * @param data 返回数据
- * @return ApiResponse
- */
- public static OssApiResponse ofStatus(ApiStatus status, T data) {
- return of(status.getCode(), status.getReasonPhrase(), data);
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProcessCommentRes.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProcessCommentRes.java
deleted file mode 100644
index c4e9fb5..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProcessCommentRes.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package com.hz.pm.api.provincial.model.res;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * @Classname ProcessCommentDTO
- * @Description
- * @Date 2023/3/2 15:25
- * @Author PoffyZhang
- */
-@Data
-@Builder
-@ApiModel(value = "ProcessCommentRes", description = "省局返回流程审核详情")
-@AllArgsConstructor
-@NoArgsConstructor
-public class ProcessCommentRes {
-
- @ApiModelProperty("任务id")
- private String taskId;
-
- @ApiModelProperty("comment")
- private String comment;
-
- @ApiModelProperty("流程步骤")
- private String stepName;
-
- @ApiModelProperty("节点ID")
- private String nodeId;
-
- @ApiModelProperty("审批状态")
- private String status;
-
- @ApiModelProperty("审批人")
- private String label;
-
- @ApiModelProperty("时间")
- private String approverTime;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProvincialApplicationRes.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProvincialApplicationRes.java
deleted file mode 100644
index d82bd4c..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProvincialApplicationRes.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.hz.pm.api.provincial.model.res;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import io.swagger.annotations.ApiModel;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-import java.util.List;
-
-/**
- * @Classname ProvincialApplicationDTO
- * @Description
- * @Date 2023/3/2 10:06
- * @Author PoffyZhang
- */
-@Data
-@Builder
-@ApiModel(value = "ProvincialApplicationRes", description = "")
-@NoArgsConstructor
-@AllArgsConstructor
-public class ProvincialApplicationRes implements Serializable {
-
-
- //云 信息
- private List clouds;
- //是否初次建设 1是 2不是
- private Integer isFirst;
- //应用名称
- private String applicationName;
- //关联 关联的IRS应用code
- private String applicationCode;
- //关联的IRS应用name
- private String relatedExistsApplication;
- //1: '办公类系统',2: '业务应用类系统',3: '门户网站',4: '宣传微博/微信公众号',5: '硬件类系统',6: '工具类系统',99: '其他'
- private Integer applicationType;
- //建设层级 1:国家 2:省级 3:市级 4:县(市、区)
- private Integer buildLevel;
- //是否统建 0:否 1:是
- private Integer isUniteBuild;
- //统建类型 1:全省统建 2:全市统建
- private Integer unionBuildKind;
- //应用简介
- private String applicationSummary;
- //应用备注
- private String applicationRemark;
- //应用总投资测算明细
- private String applicationEstimateFile;
- //是否数改系统 0:否 1:是
- private Integer isFiveDomain;
- //1: '党政机关整体智治',2: '数字政府',3: '数字经济',4: '数字社会',7: '数字文化',5: '数字法治',6: '一体化智能化公共数据平台', 8: '基层智治' 多个用英文,分隔
- private String fiveDomain;
- //业务领域
- private String bizDomain;
- //否涉及业务协同 0:否 1:是
- private Integer isBizCooperate;
- //协同单位111111
- private String cooperativeUnit;
- //用户范围 0: '机关事业单位人员','0-1': '跨部门跨系统','0-2': '系统内地方各级','0-3': '本部门本级','0-4': '处室内部','0-6': '主管处室内部','0-5': '其他',1: '企业', 2: '社会公众',3: '其他' 多个用英文,分隔
- private String userRange;
- //是否使用政务云资源 1使用
- private Integer useGovCloud;
- //是否符合国家信息技术应用创新相关规范 0:否 1:是
- private Integer nationalITSpec;
- //网络环境 1:政务内网 2:政务外网 3:互联网 4:业务专网 5:单机
- private String netEnv;
- //等保级别 1:一级 2:二级 3:三级 4:四级 5:五级
- private Integer secrecyGrade;
- //密码测评级别 1:一级 2:二级 3:三级 4:四级 5:五级
- private Integer passwordGrade;
- //是否是S2 0:否 1:是
- private Integer isS2;
- //一本账应用名称
- private String accountAppName;
- //领域”大脑”一本帐名称
- private String brainAccountAppName;
- //是否使用公共数据
- private Integer useCommonData;
- //使用的公共数据名称
- private String dataName;
- //使用公共组件的名称
- private String commonComponents;
- //是否使用公共组件
- private Integer useCommonComponent;
- //是否产生公共组件
- private Integer isProduceCommonComponent;
- //产生的组件名称
- private String produceCommonComponent;
- //发布端 '浙里办','浙政钉','数字化改革门户','支付宝','微信','网页','PC客户端','APP端'
- private String publishSide;
-
- @Builder
- @JsonIgnoreProperties(value = { "handler"})
- @NoArgsConstructor
- @AllArgsConstructor
- public static class Cloud implements Serializable {
- //云资源台数 11
- private Integer cloudNums;
- //云资源类型 云服务器(ECS)
- private String cloudType;
- //云资源规格 1核8G
- private String cloudBasicSpec;
- //云资源描述
- private String cloudUseDescription;
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProvincialProjectRes.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProvincialProjectRes.java
deleted file mode 100644
index 600dcfe..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/ProvincialProjectRes.java
+++ /dev/null
@@ -1,130 +0,0 @@
-package com.hz.pm.api.provincial.model.res;
-
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.math.BigDecimal;
-import java.util.List;
-
-/**
- * @Classname ProvincialProjectDTO
- * @Description
- * @Date 2023/3/2 10:06
- * @Author PoffyZhang
- */
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-@ApiModel(value = "ProvincialProjectDTO")
-public class ProvincialProjectRes {
-
- @ApiModelProperty("项目审核结果 1审核中 2审核通过 3审核不通过")
- private Integer projectStatus;
-
- @ApiModelProperty("区域code")
- private String regionCode;
-
- @ApiModelProperty("区域名称")
- private String regionName;
-
- @ApiModelProperty("重大项目名称")
- private String projectName;
-
- @ApiModelProperty("重大项目code 21位")
- private String projectId;
-
- @ApiModelProperty("项目类型 1新建 2续建")
- private Integer projectType;
-
- @ApiModelProperty("项目总投资(万元)")
- private BigDecimal totalMoney;
-
- @ApiModelProperty("项目年度预算(万元)")
- private BigDecimal yearBudget;
-
- @ApiModelProperty("自有资金,政府投资-本级财政资金,政府投资-上级补助资金")
- private String budgetFrom;
-
- @ApiModelProperty("预算年度 2023")
- private String year;
-
- @ApiModelProperty("财政code 32")
- private String financialCode;
-
- @ApiModelProperty("发改code 23")
- private String developCode;
-
- @ApiModelProperty("开始时间 比如2022-11-18")
- private String beginTime;
-
- @ApiModelProperty("结束时间 比如2022-12-13")
- private String endTime;
-
- @ApiModelProperty("立项依据1111")
- private String buildBasis;
-
- @ApiModelProperty("立项依据材料 [{\"fileId\":\"\"}]")
- private String buildBasisFile;
-
- @ApiModelProperty("项目概述")
- private String projectSummary;
-
- @ApiModelProperty("负责人")
- private String responsibleMan;
-
- @ApiModelProperty("联系人联系方式")
- private String responsibleManPhone;
-
- @ApiModelProperty("联系人")
- private String contactName;
-
- @ApiModelProperty("联系人联系方式")
- private String contactPhone;
-
- @ApiModelProperty("建设单位 比如财政局")
- private String buildUnit;
-
- @ApiModelProperty("建设单位浙政钉code")
- private String buildUnitCode;
-
- @ApiModelProperty("主管单位")
- private String superUnit;
-
- @ApiModelProperty("主管单位浙政钉code")
- private String superUnitCode;
-
- @ApiModelProperty("可研报告文件")
- private String researchReport;
-
- @ApiModelProperty("项目申报书")
- private String projectApplyFile;
-
- @ApiModelProperty("项目总投资测算明细")
- private String projectEstimateFile;
-
- @ApiModelProperty("申报单位主要职责")
- private String unitThreePlan;
-
- @ApiModelProperty("其他附件")
- private String otherFile;
-
- @ApiModelProperty("项目备注111")
- private String projectRemark;
-
- @ApiModelProperty("是否有效 1有效 2无效 3撤回")
- private Integer isEffective;
-
- @ApiModelProperty("是否包含应用 1包含")
- private Integer includeApplication;
-
- @ApiModelProperty("app信息")
- private List applicationInfo;
-
- @ApiModelProperty("审核信息")
- private List processComment;
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/SjApiResponse.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/SjApiResponse.java
deleted file mode 100644
index 414d1c4..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/model/res/SjApiResponse.java
+++ /dev/null
@@ -1,120 +0,0 @@
-package com.hz.pm.api.provincial.model.res;
-
-import com.ningdatech.basic.enumeration.Status;
-import com.ningdatech.basic.model.ApiStatus;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-import java.io.Serializable;
-
-/**
- *
- * ApiResponse - 省局统一的接口返回值封装
- *
- *
- * @author ZPF
- * @since 14:29 2022/9/29
- */
-@Data
-@NoArgsConstructor
-public class SjApiResponse implements Serializable {
- private static final long serialVersionUID = 532384723325394156L;
-
- public static final int SUCCESS_CODE = 200;
-
- public static final String SUCCESS_MSG = "success";
-
- public static final int ERROR_CODE = 500;
-
- public static final String ERROR_MSG = "Internal server error";
-
- /**
- * 状态码
- */
- private Integer code;
-
- /**
- * 返回内容
- */
- private String msg;
-
- /**
- * 返回数据
- */
- private T data;
-
- /**
- * 全参构造函数
- *
- * @param code 状态码
- * @param msg 返回内容
- * @param data 返回数据
- */
- private SjApiResponse(Integer code, String msg, T data) {
- this.code = code;
- this.msg = msg;
- this.data = data;
- }
-
- /**
- * 构造一个自定义的API返回
- *
- * @param code 状态码
- * @param msg 返回内容
- * @param data 返回数据
- * @return ApiResponse
- */
- public static SjApiResponse of(Integer code, String msg, T data) {
- return new SjApiResponse<>(code, msg, data);
- }
-
- /**
- * 构造一个成功且不带数据的API返回
- *
- * @return ApiResponse
- */
- public static SjApiResponse ofSuccess() {
- return ofSuccess(null);
- }
-
- /**
- * 构造一个成功且带数据的API返回
- *
- * @param data 返回数据
- * @return ApiResponse
- */
- public static SjApiResponse ofSuccess(T data) {
- return ofStatus(Status.OK, data);
- }
-
- /**
- * 构造一个成功且自定义消息的API返回
- *
- * @param msg 返回内容
- * @return ApiResponse
- */
- public static SjApiResponse ofMessage(String msg) {
- return of(Status.OK.getCode(), msg, null);
- }
-
- /**
- * 构造一个有状态的API返回
- *
- * @param status 状态 {@link Status}
- * @return ApiResponse
- */
- public static SjApiResponse ofStatus(ApiStatus status) {
- return ofStatus(status, null);
- }
-
- /**
- * 构造一个有状态且带数据的API返回
- *
- * @param status 状态 {@link Status}
- * @param data 返回数据
- * @return ApiResponse
- */
- public static SjApiResponse ofStatus(ApiStatus status, T data) {
- return of(status.getCode(), status.getReasonPhrase(), data);
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/service/IJoinReviewProvincialBureauService.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/service/IJoinReviewProvincialBureauService.java
deleted file mode 100644
index 4f9595d..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/service/IJoinReviewProvincialBureauService.java
+++ /dev/null
@@ -1,29 +0,0 @@
-package com.hz.pm.api.provincial.service;
-
-import com.hz.pm.api.provincial.model.dto.ProvincialProjectDTO;
-import com.hz.pm.api.provincial.model.res.SjApiResponse;
-
-/**
- * @Classname JointReviewProvincialBureauService
- * @Description 省局联审接口
- * @Date 2023/3/2 9:29
- * @Author PoffyZhang
- */
-public interface IJoinReviewProvincialBureauService {
-
- /**
- * 推送/保存 重大接口到 省局联审
- *
- * @return \
- */
- Boolean pushImportProject(ProvincialProjectDTO project);
-
-
- /**
- * 查看 本区域 省局联审 的项目审核详情
- *
- * @return \
- */
- SjApiResponse processInfo(String projectId);
-
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/service/impl/JoinReviewProvincialBureauServiceImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/provincial/service/impl/JoinReviewProvincialBureauServiceImpl.java
deleted file mode 100644
index 79f974f..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/provincial/service/impl/JoinReviewProvincialBureauServiceImpl.java
+++ /dev/null
@@ -1,141 +0,0 @@
-package com.hz.pm.api.provincial.service.impl;
-
-import cn.hutool.core.util.StrUtil;
-import cn.hutool.crypto.SecureUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
-import com.hz.pm.api.common.config.ProvincialProperties;
-import com.hz.pm.api.provincial.model.dto.ProvinceApiResponse;
-import com.hz.pm.api.provincial.model.dto.ProvincialProjectDTO;
-import com.hz.pm.api.provincial.model.res.SjApiResponse;
-import com.hz.pm.api.provincial.service.IJoinReviewProvincialBureauService;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.http.HttpMethod;
-import org.springframework.http.MediaType;
-import org.springframework.http.RequestEntity;
-import org.springframework.http.ResponseEntity;
-import org.springframework.stereotype.Service;
-import org.springframework.web.client.RestTemplate;
-
-/**
- * @Classname JointReviewProvincialBureauService
- * @Description 省局联审接口
- * @Date 2023/3/2 9:29
- * @Author PoffyZhang
- */
-@Service
-@Slf4j
-public class JoinReviewProvincialBureauServiceImpl implements IJoinReviewProvincialBureauService {
-
- @Autowired
- private ProvincialProperties provincialProperties;
- @Autowired
- private RestTemplate restTemplate;
- @Value("${irs.interface-refresh.request-token-url:}")
- private String govRequestTokenUrl;
- @Value("${irs.interface-refresh.refresh-token-url:}")
- private String govRefreshTokenUrl;
-
- @Value("${irs.province-gov.url:}")
- private String govUrl;
-
- @Value("${irs.province-gov.appSecret:}")
- private String govAppSecret;
-
- @Value("${irs.province-gov.appKey:}")
- private String govAppKey;
-
- @Value("${irs.province-gov.interfaceName:}")
- private String interfaceName;
-
- /**
- * 推送/保存 重大接口到 省局联审
- *
- * @return
- */
- @Override
- public Boolean pushImportProject(ProvincialProjectDTO project) {
- Long timeStamp = System.currentTimeMillis() / 1000;
- String url = provincialProperties.getHost() + provincialProperties.getPushUrl() + "?timestamp=" + timeStamp;
- log.info("省局推送联审url {}", url);
- ResponseEntity responseEntity;
-
- String signature = getSha256(timeStamp, provincialProperties.getPushUrl(),
- HttpMethod.POST.name(), provincialProperties.getKey(), provincialProperties.getSecret());
-
- //发送post请求
- RequestEntity requestEntity = RequestEntity
- .post(url)
- .header("Accept", MediaType.APPLICATION_JSON.toString())
- .header("X-Hmac-Auth-Key", provincialProperties.getKey())
- .header("X-Hmac-Auth-Signature", signature)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON)
- .body(project);
-
- log.info("省局联审 提交 :{}", requestEntity);
- log.info("省局联审 提交body :{}", JSON.toJSONString(requestEntity.getBody()));
- try {
- responseEntity = restTemplate.exchange(requestEntity, ProvinceApiResponse.class);
- log.info("省局联审 响应 :{}", responseEntity);
- if (responseEntity.getBody().getCode().equals(200)) {
- return Boolean.TRUE;
- }
- } catch (Exception e) {
- log.error("[省局联审] http request error", e);
- }
-
- return Boolean.FALSE;
- }
-
- /**
- * 获取流程审批详情
- *
- * @param projectId
- * @return
- */
- @Override
- public SjApiResponse processInfo(String projectId) {
- Long timeStamp = System.currentTimeMillis() / 1000;
- String url = provincialProperties.getHost() + provincialProperties.getDetailUrl()
- + "?timestamp=" + timeStamp;
-
- log.info("省局获取审核详情 url {}", url);
- ResponseEntity responseEntity = null;
-
- String signature = getSha256(timeStamp, provincialProperties.getDetailUrl(),
- HttpMethod.POST.name(), provincialProperties.getKey(), provincialProperties.getSecret());
-
- JSONObject jsonBaby = new JSONObject();
- jsonBaby.put("projectId", projectId);
- log.info("请求体 :{}", jsonBaby);
- //发送post请求
- RequestEntity requestEntity = RequestEntity
- .post(url)
- .header("Accept", MediaType.APPLICATION_JSON.toString())
- .header("X-Hmac-Auth-Key", provincialProperties.getKey())
- .header("X-Hmac-Auth-Signature", signature)
- .contentType(MediaType.APPLICATION_JSON)
- .accept(MediaType.APPLICATION_JSON)
- .body(jsonBaby); //也可以是DTO
-
- try {
- responseEntity = restTemplate.exchange(requestEntity, SjApiResponse.class);
- log.info("获取审批详情 响应 :{}", responseEntity);
- } catch (Exception e) {
- log.error("[省局获取审核详情] http request error", e);
- }
-
- return responseEntity.getBody();
- }
-
- private static String getSha256(Long timeStamp, String url, String method, String key, String secret) {
- String bytesToSign = method + StrUtil.LF + url + StrUtil.LF + timeStamp + StrUtil.LF + key;
- log.info("加密message :{}", bytesToSign);
- String res = SecureUtil.hmacSha256(secret).digestBase64(bytesToSign, false);
- log.info("加密结果 :{}", res);
- return res;
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java
index 65210f3..518aba8 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/listener/ProcessEndListener.java
@@ -37,7 +37,6 @@ import java.util.List;
import java.util.Objects;
import java.util.Set;
-import static com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus.PRE_APPLYING;
import static com.hz.pm.api.todocenter.constant.WorkNoticeConst.PASS_MSG_TEMPLATE;
import static com.hz.pm.api.todocenter.constant.WorkNoticeConst.PASS_MSG_TEMPLATE2;
@@ -185,8 +184,6 @@ public class ProcessEndListener {
case UNDER_INTERNAL_AUDIT:
// 当前项目状态是部门联审中
case DEPARTMENT_JOINT_REVIEW:
- // 当前项目状态是方案评审中
- case SCHEME_UNDER_REVIEW:
handlerManage.updatePassProjectStatus(0L, project);
break;
default:
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/CockpitStatsStatisticsTask.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/CockpitStatsStatisticsTask.java
deleted file mode 100644
index 7651f72..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/CockpitStatsStatisticsTask.java
+++ /dev/null
@@ -1,926 +0,0 @@
-package com.hz.pm.api.scheduler.task;
-
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.date.StopWatch;
-import cn.hutool.core.util.ObjectUtil;
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.google.common.collect.Lists;
-import com.hz.pm.api.common.helper.RegionCacheHelper;
-import com.hz.pm.api.common.model.constant.BizConst;
-import com.hz.pm.api.common.model.constant.RegionConst;
-import com.hz.pm.api.common.util.BizUtils;
-import com.hz.pm.api.dashboard.constant.DashboardConstant;
-import com.hz.pm.api.dashboard.model.entity.CockpitStats;
-import com.hz.pm.api.dashboard.model.po.SecrecyPasswordGradePO;
-import com.hz.pm.api.dashboard.service.ICockpitStatsService;
-import com.hz.pm.api.expert.entity.ExpertIntentionWorkRegion;
-import com.hz.pm.api.expert.entity.ExpertUserFullInfo;
-import com.hz.pm.api.expert.service.IExpertIntentionWorkRegionService;
-import com.hz.pm.api.expert.service.IExpertUserFullInfoService;
-import com.hz.pm.api.gov.enumeration.GovProjectStatusEnum;
-import com.hz.pm.api.gov.model.entity.*;
-import com.hz.pm.api.gov.service.*;
-import com.hz.pm.api.meta.model.entity.ExpertTag;
-import com.hz.pm.api.meta.service.IExpertTagService;
-import com.hz.pm.api.performance.model.entity.PerformanceAppraisalProject;
-import com.hz.pm.api.performance.service.IPerformanceAppraisalProjectService;
-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.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.IProjectService;
-import com.hz.pm.api.sys.model.dto.RegionDTO;
-import com.hz.pm.api.sys.model.entity.WflowEarlyWarningRecords;
-import com.hz.pm.api.sys.service.IEarlyWarningRecordsService;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.apache.commons.lang3.StringUtils;
-import org.flowable.engine.HistoryService;
-import org.flowable.engine.history.HistoricActivityInstance;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.math.BigDecimal;
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.time.LocalDateTime;
-import java.util.*;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-/**
- * @author ZPF
- * @Class CockpitStatsStatisticsTask
- * 驾驶舱 统计 每日任务
- * @since 2023/08/31 18:16
- */
-@Component
-@Slf4j
-@RequiredArgsConstructor
-public class CockpitStatsStatisticsTask {
-
- @Value("${hostname:}")
- public String HOST;
-
- @Value("${spring.profiles.active}")
- public String active;
-
- private final ICockpitStatsService cockpitStatsService;
- private final RegionCacheHelper regionCacheHelper;
- private final IProjectService projectService;
- private final IProjectInstService projectInstService;
- private final IExpertUserFullInfoService expertUserFullInfoService;
- private final IPerformanceAppraisalProjectService performanceAppraisalProjectService;
- private final IGovBizProjectBaseinfoService baseinfoService;
- private final IGovBizProjectApplyService applyService;
- private final HistoryService historyService;
- private final IGovBizProjectApproveService approveService;
- private final IGovBizProjectProcureService procureService;
- private final IGovBizProjectCimplementService cimplementService;
- private final IEarlyWarningRecordsService earlyWarningRecordsService;
- private final IExpertIntentionWorkRegionService expertIntentionWorkRegionService;
- private final IExpertTagService expertTagService;
-
- private List years = Lists.newArrayList(2021, 2022, 2023, 2024, 2025);
-
-
- /**
- * 定义统计 驾驶舱数据 每天3点开始执行一次
- */
- @Scheduled(cron = "0 0 3 * * ?")
- public void doTask() throws UnknownHostException {
- if (!HOST.equals(InetAddress.getLocalHost().getHostName())) {
- log.info("定时器没开启或者host不对! {}:{}",
- HOST, InetAddress.getLocalHost().getHostName());
- return;
- }
- if (BizConst.PRE.equals(active)) {
- log.info("预发环境不用同步!");
- return;
- }
-
- log.info("驾驶舱数据统计任务开始=====");
-
- StopWatch stopWatch = new StopWatch();
- stopWatch.start();
-
- List res = Lists.newArrayList();
- //1.根据2个维度来统计 区域和分年
- //1.总的
- res.add(statisticsData(DashboardConstant.CockpitStats.TOTAL,
- DashboardConstant.CockpitStats.TOTAL, DashboardConstant.CockpitStats.NONE_YEAR));
- for (Integer year : years) {
- res.add(statisticsData(DashboardConstant.CockpitStats.TOTAL,
- DashboardConstant.CockpitStats.TOTAL, year));
- }
-
- List regions = regionCacheHelper.listChildren(RegionConst.RC_HZ, RegionConst.RL_CITY);
- regions = regions.stream().filter(r -> r.getRegionLevel() != RegionConst.RL_CITY).collect(Collectors.toList());
- for (RegionDTO regionDto : regions) {
- res.add(statisticsData(regionDto.getRegionCode(), regionDto.getRegionName(),
- DashboardConstant.CockpitStats.NONE_YEAR));
- for (Integer year : years) {
- res.add(statisticsData(regionDto.getRegionCode(), regionDto.getRegionName(), year));
- }
- }
-
- //如果结果不为空 就删除之前的 插入最新的数据
- if (CollUtil.isNotEmpty(res)) {
- //计算增长率
- computeRates(res);
- List list = cockpitStatsService.list();
- List ids = list.stream().map(CockpitStats::getId).collect(Collectors.toList());
- cockpitStatsService.removeByIds(ids);
- cockpitStatsService.saveBatch(res);
- }
-
- stopWatch.stop();
- log.info("驾驶舱数据统计任务结束====={}s", stopWatch.getTotalTimeSeconds());
- }
-
- private void computeRates(List res) {
- Map map = res.stream().collect(Collectors.toMap(r -> r.getRegionCode() + r.getYear(), r -> r));
- for (CockpitStats cockpitStats : res) {
- if (Objects.isNull(cockpitStats.getYear())) {
- continue;
- }
- //算增长率
- //去年的数据 用于算 增长比例
- if (cockpitStats.getYear().equals(DashboardConstant.CockpitStats.NONE_YEAR)) {
- int thisYear = LocalDateTime.now().getYear();
- CockpitStats thisYearData = map.get(cockpitStats.getRegionCode() + thisYear);
- CockpitStats lastYearData = map.get(cockpitStats.getRegionCode() + (thisYear - 1));
- buildMonitorRise(cockpitStats, thisYearData, lastYearData);
- } else {
- CockpitStats lastYearData = map.get(cockpitStats.getRegionCode() + (cockpitStats.getYear() - 1));
- buildMonitorRise(cockpitStats, cockpitStats, lastYearData);
- }
- }
-
- }
-
- /**
- * 统计的具体逻辑
- *
- * @param regionCode
- * @param regionName
- * @param year
- * @return
- */
- private CockpitStats statisticsData(String regionCode, String regionName, Integer year) {
- CockpitStats cockpitStats = new CockpitStats();
- cockpitStats.setRegionCode(regionCode);
- cockpitStats.setRegionName(regionName);
- cockpitStats.setYear(year);
-
- //申报项目
- boolean condition = Objects.nonNull(year) && !year.equals(DashboardConstant.CockpitStats.NONE_YEAR);
- boolean condition1 = Objects.isNull(year) || year.equals(DashboardConstant.CockpitStats.NONE_YEAR);
- List projects = projectService.list(Wrappers.lambdaQuery(Project.class)
- .eq(Project::getNewest, Boolean.TRUE)
- .eq(StringUtils.isNotBlank(regionCode) && !DashboardConstant.CockpitStats.TOTAL.equals(regionCode),
- Project::getAreaCode, regionCode)
- .eq(condition, Project::getProjectYear, year)
- .in(condition1, Project::getProjectYear, years));
-
- //项目归集
- List applieYears = applyService.list(Wrappers.lambdaQuery(GovBizProjectApply.class)
- .eq(condition,
- GovBizProjectApply::getBaseProjSetYear, year)
- .in(condition1,
- GovBizProjectApply::getBaseProjSetYear, years));
- List yearProjIds = applieYears.stream().map(GovBizProjectApply::getBaseProjId)
- .collect(Collectors.toList());
-
- List baseInfos = Lists.newArrayList();
- if (CollUtil.isNotEmpty(yearProjIds)) {
- baseInfos = baseinfoService.list(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class)
- .eq(GovBizProjectBaseinfo::getDeleted, Boolean.FALSE)
- .in(GovBizProjectBaseinfo::getBaseProjId, yearProjIds));
- }
-
- List approves = Lists.newArrayList();
- List applies = Lists.newArrayList();
- List procures = Lists.newArrayList();
- List cimplements = Lists.newArrayList();
- if (CollUtil.isNotEmpty(baseInfos)) {
- List baseProjIds = baseInfos.stream().map(GovBizProjectBaseinfo::getBaseProjId).collect(Collectors.toList());
- approves = approveService.list(Wrappers.lambdaQuery(GovBizProjectApprove.class)
- .in(GovBizProjectApprove::getBaseProjId, baseProjIds));
-
- applies = applyService.list(Wrappers.lambdaQuery(GovBizProjectApply.class)
- .in(GovBizProjectApply::getBaseProjId, baseProjIds));
-
- procures = procureService.list(Wrappers.lambdaQuery(GovBizProjectProcure.class)
- .in(GovBizProjectProcure::getBaseProjId, baseProjIds));
-
- cimplements = cimplementService.list(Wrappers.lambdaQuery(GovBizProjectCimplement.class)
- .in(GovBizProjectCimplement::getBaseProjId, baseProjIds));
- }
-
- //1.项目监测
- //1.1 超期在建项目
- Integer overdueConstructionProjectsNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getPlanAcceptanceTime()) &&
- p.getPlanAcceptanceTime().compareTo(LocalDateTime.now()) < 0 &&
- Objects.nonNull(p.getStatus()) && p.getStatus().compareTo(ProjectStatus.ACCEPTED.getCode()) < 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setMonitorOverdueConstructionProjectsNum(overdueConstructionProjectsNum);
- //1.2 环节滞后项目
- cockpitStats.setMonitorLaggingProjectsNum(computeLagging(projects));
-
- //1.3预审驳回项目
- Integer preFailed = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().equals(ProjectStatus.PREQUALIFICATION_FAILED.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setMonitorRejectedPreReviewProjectsNum(preFailed);
-
- //1.4 建设方案评审失败
- Integer constructionFailed = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) && p.getStatus().equals(ProjectStatus.SCHEME_REVIEW_FAILED.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setMonitorRejectedApproveProjectsNum(constructionFailed);
- //1.5 验收不达标
- cockpitStats.setMonitorAcceptConditionsNotStandardsNum(0);
-
- //1.6 总申报金额
- double totalDeclaredAmount = projects.stream().mapToDouble(p -> Objects.nonNull(p.getDeclareAmount()) ? p.getDeclareAmount().doubleValue() : 0.0).sum();
- cockpitStats.setMonitorDeclaredAmount(BigDecimal.valueOf(totalDeclaredAmount));
- //1.7 总安全投入
- double totalSafetyAmount = projects.stream().mapToDouble(p -> {
- if (Objects.nonNull(p.getSafetyInputDescribe())) {
- final Double[] total = {0.0};
- try {
- JSONArray array = JSON.parseArray(p.getSafetyInputDescribe());
- array.forEach(j -> {
- JSONObject json = JSON.parseObject(JSON.toJSONString(j));
- Double safetyInputAmount = json.getDouble(DashboardConstant.Protrait.FEILD_SAFETYMONEY);
- total[0] += safetyInputAmount;
- });
- } catch (Exception e) {
-
- }
- return total[0];
- }
- return 0.0;
- }).sum();
- cockpitStats.setMonitorSafetyInputAmount(BigDecimal.valueOf(totalSafetyAmount));
-
- //1.8等保密评
- SecrecyPasswordGradePO secrecyPasswordGradePo = cockpitStatsService.getSecrecyPasswordGrade(regionCode, year);
-
- Integer guijiSecerecyGrade1 = 0;
- Integer guijiSecerecyGrade2 = 0;
- Integer guijiSecerecyGrade3 = 0;
- Integer guijiSecerecyGrade4 = 0;
- Integer guijiSecerecyGrade5 = 0;
- //项目归集 评审信息
- for (GovBizProjectApprove approve : approves) {
- String equalProtectionLevel = approve.getEqualProtectionLevel();
- if (StringUtils.isNotBlank(equalProtectionLevel)) {
- switch (equalProtectionLevel) {
- case "01":
- guijiSecerecyGrade1++;
- break;
- case "02":
- guijiSecerecyGrade2++;
- break;
- case "03":
- guijiSecerecyGrade3++;
- break;
- case "04":
- guijiSecerecyGrade4++;
- break;
- case "05":
- guijiSecerecyGrade5++;
- break;
- default:
- break;
- }
- }
- }
-
- Integer passwordGradeNumGov = 0;
- for (GovBizProjectCimplement cimplement : cimplements) {
- if (StringUtils.isNotBlank(cimplement.getBaseInforLevelFile())) {
- passwordGradeNumGov++;
- }
- }
-
- if (Objects.nonNull(secrecyPasswordGradePo)) {
- cockpitStats.setMonitorSecrecyGrade1Num(secrecyPasswordGradePo.getMonitorSecrecyGrade1Num() + guijiSecerecyGrade1);
- cockpitStats.setMonitorSecrecyGrade2Num(secrecyPasswordGradePo.getMonitorSecrecyGrade2Num() + guijiSecerecyGrade2);
- cockpitStats.setMonitorSecrecyGrade3Num(secrecyPasswordGradePo.getMonitorSecrecyGrade3Num() + guijiSecerecyGrade3);
- cockpitStats.setMonitorSecrecyGrade4Num(secrecyPasswordGradePo.getMonitorSecrecyGrade4Num() + guijiSecerecyGrade4);
- cockpitStats.setMonitorSecrecyGrade5Num(secrecyPasswordGradePo.getMonitorSecrecyGrade5Num() + guijiSecerecyGrade5);
- cockpitStats.setMonitorPasswordGrade1Num(secrecyPasswordGradePo.getMonitorPasswordGrade1Num() + passwordGradeNumGov);
- cockpitStats.setMonitorPasswordGrade2Num(secrecyPasswordGradePo.getMonitorPasswordGrade2Num());
- cockpitStats.setMonitorPasswordGrade3Num(secrecyPasswordGradePo.getMonitorPasswordGrade3Num());
- cockpitStats.setMonitorPasswordGrade4Num(secrecyPasswordGradePo.getMonitorPasswordGrade4Num());
- cockpitStats.setMonitorPasswordGrade5Num(secrecyPasswordGradePo.getMonitorPasswordGrade5Num());
- } else {
- cockpitStats.setMonitorSecrecyGrade1Num(guijiSecerecyGrade1);
- cockpitStats.setMonitorSecrecyGrade2Num(guijiSecerecyGrade2);
- cockpitStats.setMonitorSecrecyGrade3Num(guijiSecerecyGrade3);
- cockpitStats.setMonitorSecrecyGrade4Num(guijiSecerecyGrade4);
- cockpitStats.setMonitorSecrecyGrade5Num(guijiSecerecyGrade5);
- cockpitStats.setMonitorPasswordGrade1Num(passwordGradeNumGov);
- }
-
- //2.专家统计
- List lsRegionCodes = RegionConst.LS_ARR;
- List intentions = expertIntentionWorkRegionService.list(Wrappers.lambdaQuery(ExpertIntentionWorkRegion.class)
- .eq(StringUtils.isNotBlank(regionCode) && !DashboardConstant.CockpitStats.TOTAL.equals(regionCode),
- ExpertIntentionWorkRegion::getRegionCode, regionCode)
- .in(StringUtils.isBlank(regionCode) || DashboardConstant.CockpitStats.TOTAL.equals(regionCode),
- ExpertIntentionWorkRegion::getRegionCode, lsRegionCodes));
-
- List experts = Lists.newArrayList();
- if (CollUtil.isNotEmpty(intentions)) {
- List userIds = intentions.stream().map(ExpertIntentionWorkRegion::getUserId)
- .collect(Collectors.toList());
- experts = expertUserFullInfoService.list(Wrappers.lambdaQuery(ExpertUserFullInfo.class)
- .in(ExpertUserFullInfo::getUserId, userIds));
- }
-
- List goodAt = expertTagService.list(Wrappers.lambdaQuery(ExpertTag.class));
- Map> tagMap = goodAt.stream()
- .collect(Collectors.groupingBy(ExpertTag::getUserId));
-
- String networkCode = DashboardConstant.Expert.NETWORK_CODE;
- String xinchuangCode = DashboardConstant.Expert.XINCHUANG_CODE;
- String fanganCode = DashboardConstant.Expert.FANGAN_CODE;
- String jishuCode = DashboardConstant.Expert.JISHU_CODE;
- String dangzhengCode = DashboardConstant.Expert.DANGZHENG_CODE;
- String ruanyingCode = DashboardConstant.Expert.RUANYING_CODE;
- String caiwuCode = DashboardConstant.Expert.CAIWU_CODE;
- List specialTags = Lists.newArrayList(networkCode, xinchuangCode, fanganCode, jishuCode,
- dangzhengCode, ruanyingCode, caiwuCode);
-
- cockpitStats.setExpertTotalNum(experts.size());
- Integer financialNum = 0;
- Integer networkSecurityNum = 0;
- Integer xinchuangNum = 0;
- Integer planRationalityNum = 0;
- Integer promotionInfoTechnologyNum = 0;
- Integer partyGovInfoNum = 0;
- Integer softHardPricingNum = 0;
- Integer technicalFeasibilityAssessmentNum = 0;
- Integer specialExpertNum = 0;
- for (ExpertUserFullInfo e : experts) {
- if (tagMap.containsKey(e.getUserId())) {
- List expertTags = tagMap.get(e.getUserId());
- boolean isContain = Boolean.FALSE;
- for (ExpertTag expertTag : expertTags) {
- if (expertTag.getTagCode().equals(networkCode)) {
- networkSecurityNum++;
- }
- if (expertTag.getTagCode().equals(caiwuCode)) {
- financialNum++;
- }
- if (expertTag.getTagCode().equals(xinchuangCode)) {
- xinchuangNum++;
- }
- if (expertTag.getTagCode().equals(fanganCode)) {
- planRationalityNum++;
- }
- if (expertTag.getTagCode().equals(jishuCode)) {
- technicalFeasibilityAssessmentNum++;
- }
- if (expertTag.getTagCode().equals(dangzhengCode)) {
- partyGovInfoNum++;
- }
- if (expertTag.getTagCode().equals(ruanyingCode)) {
- softHardPricingNum++;
- }
- if (specialTags.contains(expertTag.getTagCode())) {
- isContain = Boolean.TRUE;
- }
- }
- if (isContain) {
- specialExpertNum++;
- }
- }
- }
- //财务专家
- cockpitStats.setExpertFinancialNum(financialNum);
- //网络安全
- cockpitStats.setExpertNetworkSecurityNum(networkSecurityNum);
- cockpitStats.setExpertXinchuangNum(xinchuangNum);
- cockpitStats.setExpertPlanRationalityNum(planRationalityNum);
- cockpitStats.setExpertPromotionInfoTechnologyNum(promotionInfoTechnologyNum);
- cockpitStats.setExpertPartyGovInfoNum(partyGovInfoNum);
- cockpitStats.setExpertSoftHardPricingNum(softHardPricingNum);
- cockpitStats.setExpertTechnicalFeasibilityAssessmentNum(technicalFeasibilityAssessmentNum);
- cockpitStats.setSpecialExpertNum(specialExpertNum);
-
- //3.顶部数据
- //3.1 计划项目数(申报项目:完成年度计划的项目总数
- // 项目归集:评审中、待立项、已立项、已采购、已初验、已终验项目总和)
- Integer planProjectNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().compareTo(ProjectStatus.PENDING_PREQUALIFICATION.getCode()) >= 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer planProjectNumGov = (int) baseInfos.stream().filter(p -> {
- if (Objects.nonNull(p.getBaseProjSetProg()) &&
- //排除 已驳回 已终止
- (!Lists.newArrayList(GovProjectStatusEnum.REJECTED.getCode(),
- GovProjectStatusEnum.TERMINATED.getCode()).contains(p.getBaseProjSetProg()))) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setTopPlanProjectsNum(planProjectNum + planProjectNumGov);
-
- //3.2 批复项目数(申报项目:完成立项批复流程项目总数 项目归集:已立项、已采购、已初验、已终验项目总和)
- Integer approvalNumDeclared = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getApprovalAmount())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer approvalNumGov = (int) baseInfos.stream().filter(p -> {
- if (Objects.nonNull(p.getBaseProjSetProg()) && Lists.newArrayList(GovProjectStatusEnum.APPROVED.getCode(),
- GovProjectStatusEnum.PURCHASED.getCode(), GovProjectStatusEnum.HAS_PRE_INS.getCode(),
- GovProjectStatusEnum.HAS_FINAL_INS.getCode()).contains(p.getBaseProjSetProg())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
-
- BigDecimal approvalAmount = projects.stream().filter(p -> {
- if (Objects.nonNull(p.getApprovalAmount())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).map(Project::getApprovalAmount).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
-
- BigDecimal approvalAmountGov = approves.stream()
- .map(GovBizProjectApprove::getBaseInitialReviewTotalMoney)
- .filter(Objects::nonNull)
- .reduce(BigDecimal::add)
- .orElse(BigDecimal.ZERO);
-
- cockpitStats.setTopApprovalProjectsNum(approvalNumDeclared + approvalNumGov);
- cockpitStats.setTopApprovalProjectsAmount(approvalAmount.add(approvalAmountGov));
- //3.3 平均建设周期
- OptionalDouble od = Stream.concat(projects.stream().map(Project::getBuildCycle),
- applies.stream().map(GovBizProjectApply::getBaseProjDuration)).mapToInt(c -> {
- try {
- return Integer.parseInt(c);
- } catch (Exception e) {
- return 0;
- }
- }).average();
- double average = od.isPresent() ? od.getAsDouble() : 0.0;
- cockpitStats.setTopAverageConstructionPeriod((int) average);
- //3.4 在建项目数 采购备案后的项目
- Integer constructionNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().compareTo(ProjectStatus.TO_BE_PURCHASED.getCode()) >= 0
- && p.getStatus().compareTo(ProjectStatus.ACCEPTED.getCode()) < 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer constructionNumGov = (int) baseInfos.stream().filter(b -> {
- if (Objects.nonNull(b.getBaseProjSetProg()) &&
- Lists.newArrayList(GovProjectStatusEnum.PURCHASED.getCode(), GovProjectStatusEnum.HAS_PRE_INS.getCode()).contains(b.getBaseProjSetProg())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setTopOngoingProjectsNum(constructionNum + constructionNumGov);
-
- //4.地图 只要放总数 取的时候 会有逻辑(也要取项目归集)
- cockpitStats.setProjectsTotal(projects.size() + baseInfos.size());
-
- //5.下面项目状态数
- //5.1 计划(申报项目:项目预审完成到年度计划未完成 项目归集:评审中)
- Integer inPlanNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().compareTo(ProjectStatus.PREQUALIFICATION_FAILED.getCode()) > 0 &&
- p.getStatus().compareTo(ProjectStatus.IN_THE_ANNUAL_PLAN.getCode()) <= 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer inPlanNumGov = (int) baseInfos.stream().filter(p -> {
- if (Objects.nonNull(p.getBaseProjSetProg()) &&
- p.getBaseProjSetProg().equals(GovProjectStatusEnum.APPROVAL.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setProjectsTotalPlan(inPlanNum + inPlanNumGov);
-
- //5.2 处于申报(申报项目:年度计划完成到建设方案审批第一个节点审批未通过前 项目归集:待立项)
- Integer inApplyNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- (ProjectStatus.PLAN_TO_BE_DECLARED.getCode().equals(p.getStatus()) ||
- (ProjectStatus.SCHEME_UNDER_REVIEW.getCode().equals(p.getStatus()) &&
- searchSchemaReviewFlow(p.getProjectCode())))) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer inApplyNumGov = (int) baseInfos.stream().filter(p -> {
- if (Objects.nonNull(p.getBaseProjSetProg()) &&
- p.getBaseProjSetProg().equals(GovProjectStatusEnum.PENDING.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setProjectsTotalApply(inApplyNum + inApplyNumGov);
-
- //5.3 处于审批 (申报项目:建设方案审批第一个节点审批通过到立项批复未完成 项目归集:已立项)
- Integer inApproveNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- (ProjectStatus.TO_BE_APPROVED.getCode().equals(p.getStatus()) ||
- p.getStatus().compareTo(ProjectStatus.APPROVED_AFTER_CHOICE.getCode()) > 0 ||
- (ProjectStatus.SCHEME_UNDER_REVIEW.getCode().equals(p.getStatus()) &&
- searchSchemaReviewedFlow(p.getProjectCode())))) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer inApproveNumGov = (int) baseInfos.stream().filter(p -> {
- if (Objects.nonNull(p.getBaseProjSetProg()) &&
- p.getBaseProjSetProg().equals(GovProjectStatusEnum.APPROVED.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setProjectsTotalApprove(inApproveNum + inApproveNumGov);
-
- //5.4 建设 (申报项目:立项批复完成到项目初验未完成 项目归集:已采购)
- Integer inConstructionNum = (int) projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- (p.getStatus().compareTo(ProjectStatus.APPROVED_AFTER_CHOICE.getCode()) > 0 &&
- p.getStatus().compareTo(ProjectStatus.UNDER_CONSTRUCTION.getCode()) < 0) ||
- //如果在建设中 那么初验材料为空代表 初验未完成
- (p.getStatus().equals(ProjectStatus.UNDER_CONSTRUCTION.getCode()) /*&&
- StringUtils.isBlank(p.getPreliminaryInspectionMaterials())*/)) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- Integer inConstructionNumGov = (int) baseInfos.stream().filter(p -> {
- if (Objects.nonNull(p.getBaseProjSetProg()) &&
- p.getBaseProjSetProg().equals(GovProjectStatusEnum.PURCHASED.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setProjectsTotalConstruction(inConstructionNum + inConstructionNumGov);
-
- //5.5 验收 (申报项目:项目初验完成到项目终验未完成 项目归集:已初验)
- List inAcceptProjects = projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().compareTo(ProjectStatus.UNDER_CONSTRUCTION.getCode()) > 0 &&
- p.getStatus().compareTo(ProjectStatus.ACCEPTED.getCode()) < 0 ||
- //如果在建设中 那么初验材料不为空代表 初验完成
- (p.getStatus().equals(ProjectStatus.UNDER_CONSTRUCTION.getCode()) /*&&
- StringUtils.isNotBlank(p.getPreliminaryInspectionMaterials())*/)) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).collect(Collectors.toList());
- List inAcceptProjectsGov = baseInfos.stream().filter(b -> {
- if (Objects.nonNull(b.getBaseProjSetProg()) &&
- b.getBaseProjSetProg().equals(GovProjectStatusEnum.HAS_PRE_INS.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).collect(Collectors.toList());
- cockpitStats.setProjectsTotalAccept(inAcceptProjects.size() + inAcceptProjectsGov.size());
-
- //5.6 运维(申报项目:项目验收完成后且项目未注销 项目归集:已终验)
- List inOperationProjects = projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().equals(ProjectStatus.ACCEPTED.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).collect(Collectors.toList());
- int inOperationProjectsGov = (int) baseInfos.stream().filter(b -> {
- if (Objects.nonNull(b.getBaseProjSetProg()) &&
- b.getBaseProjSetProg().equals(GovProjectStatusEnum.HAS_FINAL_INS.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).count();
- cockpitStats.setProjectsTotalOperation(inOperationProjects.size() + inOperationProjectsGov);
-
- //5.7 绩效(申报项目:项目验收完成后且未完成绩效自评 项目归集:无)
- List inAcceptCodes = inOperationProjects.stream().map(Project::getProjectCode).collect(Collectors.toList());
- List performances = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
- .in(CollUtil.isNotEmpty(inAcceptCodes), PerformanceAppraisalProject::getProjectCode, inAcceptCodes)
- .in(CollUtil.isEmpty(inAcceptCodes), PerformanceAppraisalProject::getProjectCode, Lists.newArrayList("NONE"))
- .eq(PerformanceAppraisalProject::getIsReAppraisal, Boolean.TRUE)
- .isNull(PerformanceAppraisalProject::getReAppraisalTotalScore)
- );
- cockpitStats.setProjectsTotalPerformance(performances.size());
- cockpitStats.setProjectsTotalLogOff(0);
-
- //6.项目效益
- cockpitStats.setExcellentBestAppNum(0);
- cockpitStats.setExcellentMajorAppNum(0);
- cockpitStats.setExcellentCrossLevelSharingNum(0);
- cockpitStats.setExcellentMajorAppNum(0);
-
- //7.2驳回节约资金
- List rejectPreProjects = projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().equals(ProjectStatus.PREQUALIFICATION_FAILED.getCode())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).collect(Collectors.toList());
- BigDecimal rejectPreSum = rejectPreProjects.stream().map(p -> {
- if (Objects.nonNull(p.getDeclareAmount())) {
- return p.getDeclareAmount();
- }
- return BigDecimal.ZERO;
- }).reduce(BigDecimal::add).orElse(BigDecimal.ZERO);
- cockpitStats.setRejectSavingsFunds(rejectPreSum);
-
- //7.3 柱状图
- //7.3.1 申报状态的3个资金
-// projects.stream()
- //首先完成年度计划 并且未注销的项目
- List normalProjects = projects.stream().filter(p -> {
- if (Objects.nonNull(p.getStatus()) &&
- p.getStatus().compareTo(ProjectStatus.BE_SUSPENDED.getCode()) > 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).collect(Collectors.toList());
-
- //申报的申报金额(申报项目:初步方案申报金额 项目归集:项目总投资)
- final BigDecimal[] declaredAmountApprove = {BigDecimal.ZERO};
- normalProjects.stream().map(p -> ObjectUtil.defaultIfNull(p.getDeclareAmount(), BigDecimal.ZERO))
- .reduce(BigDecimal::add).ifPresent(b -> declaredAmountApprove[0] = b);
- final BigDecimal[] declaredAmountApproveGov = {BigDecimal.ZERO};
- applies.stream().map(g -> ObjectUtil.defaultIfNull(g.getBaseProjTotalAmount(), BigDecimal.ZERO))
- .reduce(BigDecimal::add).ifPresent(b -> declaredAmountApproveGov[0] = b);
- BigDecimal declaredAmountApproveTotal = declaredAmountApprove[0].add(declaredAmountApproveGov[0]);
- cockpitStats.setDeclaredAmountApprove(declaredAmountApproveTotal);
-
- //申报的批复金额(申报项目:建设方案申报金额 项目归集:建议总投资)
- final BigDecimal[] approvalAmountApprove = {BigDecimal.ZERO};
- normalProjects.stream().map(p -> ObjectUtil.defaultIfNull(p.getApprovalAmount(), BigDecimal.ZERO))
- .reduce(BigDecimal::add).ifPresent(b -> approvalAmountApprove[0] = b);
- final BigDecimal[] approvalAmountApproveGov = {BigDecimal.ZERO};
- approves.stream().map(p -> ObjectUtil.defaultIfNull(p.getBaseExpertTotalMoney(), BigDecimal.ZERO))
- .reduce(BigDecimal::add).ifPresent(b -> approvalAmountApproveGov[0] = b);
- BigDecimal approvalAmountApproveTotal = approvalAmountApprove[0].add(approvalAmountApproveGov[0]);
- cockpitStats.setApprovalAmountApprove(approvalAmountApproveTotal);
- //申报的差额
- BigDecimal subtractApprove = declaredAmountApproveTotal.subtract(approvalAmountApproveTotal);
- cockpitStats.setDifferenceApprove(subtractApprove);
-
- //批复的申报金额(申报项目:建设方案申报金额 项目归集:建议总投资)
- cockpitStats.setDeclaredAmountApproval(approvalAmountApproveTotal);
-
- //批复的批复金额(申报项目:归集信息建议批复总投资 项目归集:建议批复总投资)
- final BigDecimal[] approvalAmountApproval = {BigDecimal.ZERO};
- normalProjects.stream().map(p -> ObjectUtil.defaultIfNull(p.getProposeTotalInvest(), BigDecimal.ZERO))
- .reduce(BigDecimal::add).ifPresent(b -> approvalAmountApproval[0] = b);
- final BigDecimal[] approvalAmountApprovalGov = {BigDecimal.ZERO};
- approves.stream().map(p -> ObjectUtil.defaultIfNull(p.getBaseInitialReviewTotalMoney(), BigDecimal.ZERO))
- .reduce(BigDecimal::add).ifPresent(b -> approvalAmountApprovalGov[0] = b);
- BigDecimal approvalAmountApprovalTotal = approvalAmountApproval[0].add(approvalAmountApprovalGov[0]);
- cockpitStats.setApprovalAmountApproval(approvalAmountApprovalTotal);
-
- //批复的差额
- BigDecimal subtractApproval = approvalAmountApproveTotal.subtract(approvalAmountApprovalTotal);
- cockpitStats.setDifferenceApproval(subtractApproval);
-
- //合同的申报金额(申报项目:归集信息建议批复总投资 项目归集:建议批复总投资)
- cockpitStats.setDeclaredAmountContract(approvalAmountApprovalTotal);
-
- //合同的批复金额(申报项目:成交金额 项目归集:成交金额)
- final BigDecimal[] approvalAmountContract = {BigDecimal.ZERO};
- normalProjects.stream().map(p -> Objects.nonNull(p.getTransactionAmount()) ? p.getTransactionAmount() : BigDecimal.ZERO)
- .reduce(BigDecimal::add).ifPresent(b -> approvalAmountContract[0] = b);
- final BigDecimal[] approvalAmountContractGov = {BigDecimal.ZERO};
- procures.stream().map(p -> Objects.nonNull(p.getBaseProjPurchaseAmount()) ?
- p.getBaseProjPurchaseAmount() : BigDecimal.ZERO).reduce(BigDecimal::add)
- .ifPresent(b -> approvalAmountContractGov[0] = b);
- BigDecimal approvalAmountContractTotal = approvalAmountContract[0].add(approvalAmountContractGov[0]);
- cockpitStats.setApprovalAmountContract(approvalAmountContractTotal);
-
- //合同的差额
- BigDecimal subtractContract = approvalAmountApprovalTotal.subtract(approvalAmountContractTotal);
- cockpitStats.setDifferenceContract(subtractContract);
-
- //7 核减资金
- cockpitStats.setReduceFundsTotal(subtractApprove.add(subtractApproval).add(subtractContract));
-
- //8 产出数据
- cockpitStats.setProduceAppNum(0);
- cockpitStats.setProduceDataNum(0);
- cockpitStats.setProduceComponentNum(0);
- cockpitStats.setProduceBrainElementsNum(0);
-
- //9.绩效
- List projectCodes = projects.stream().map(Project::getProjectCode).collect(Collectors.toList());
- if (CollUtil.isNotEmpty(projectCodes)) {
- List performanceAll = performanceAppraisalProjectService.list(Wrappers.lambdaQuery(PerformanceAppraisalProject.class)
- .in(PerformanceAppraisalProject::getProjectCode, projectCodes));
- List verified = performanceAll.stream().filter(p -> {
- if (Objects.nonNull(p.getVerifyTotalScore())) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).sorted(Comparator.comparing(PerformanceAppraisalProject::getVerifyTotalScore).reversed())
- .collect(Collectors.toList());
-
- List start5 = performanceAll.stream().filter(p -> {
- if (Objects.nonNull(p.getVerifyTotalScore())
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(80)) > 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).sorted(Comparator.comparing(PerformanceAppraisalProject::getVerifyTotalScore).reversed())
- .collect(Collectors.toList());
- List start4 = performanceAll.stream().filter(p -> {
- if (Objects.nonNull(p.getVerifyTotalScore())
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(60)) >= 0
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(80)) < 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).sorted(Comparator.comparing(PerformanceAppraisalProject::getVerifyTotalScore).reversed())
- .collect(Collectors.toList());
- List start3 = performanceAll.stream().filter(p -> {
- if (Objects.nonNull(p.getVerifyTotalScore())
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(40)) >= 0
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(60)) < 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).sorted(Comparator.comparing(PerformanceAppraisalProject::getVerifyTotalScore).reversed())
- .collect(Collectors.toList());
- List start2 = performanceAll.stream().filter(p -> {
- if (Objects.nonNull(p.getVerifyTotalScore())
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(20)) >= 0
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(40)) < 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).sorted(Comparator.comparing(PerformanceAppraisalProject::getVerifyTotalScore).reversed())
- .collect(Collectors.toList());
- List start1 = performanceAll.stream().filter(p -> {
- if (Objects.nonNull(p.getVerifyTotalScore())
- && p.getVerifyTotalScore().compareTo(BigDecimal.ZERO) >= 0
- && p.getVerifyTotalScore().compareTo(BigDecimal.valueOf(20)) < 0) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }).sorted(Comparator.comparing(PerformanceAppraisalProject::getVerifyTotalScore).reversed())
- .collect(Collectors.toList());
- cockpitStats.setPerformanceTotal(performanceAll.size());
- cockpitStats.setPerformanceReviewedTotal(verified.size());
- cockpitStats.setPerformanceTobeReviewTotal(performanceAll.size() - verified.size());
-
- cockpitStats.setPerformanceTop1Score(BigDecimal.valueOf(start1.size()));
- cockpitStats.setPerformanceTop2Score(BigDecimal.valueOf(start2.size()));
- cockpitStats.setPerformanceTop3Score(BigDecimal.valueOf(start3.size()));
- cockpitStats.setPerformanceTop4Score(BigDecimal.valueOf(start4.size()));
- cockpitStats.setPerformanceTop5Score(BigDecimal.valueOf(start5.size()));
- }
-
- return cockpitStats;
- }
-
- /**
- * 建设方案申报了 但未开始审核的项目
- *
- * @param projectCode
- * @return
- */
- private boolean searchSchemaReviewFlow(String projectCode) {
- Project project = projectService.getProjectByCode(projectCode);
- if (Objects.isNull(project)) {
- return Boolean.FALSE;
- }
- List allVersionProjectId = projectService.allVersionProjectIds(project.getProjectCode());
- ProjectInst pi = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class)
- .in(ProjectInst::getProjectId, allVersionProjectId)
- .eq(ProjectInst::getInstType, InstTypeEnum.CONSTRUCTION_PLAN_REVIEW.getCode())
- .last(BizConst.LIMIT_1));
- if (Objects.isNull(pi)) {
- return Boolean.FALSE;
- }
- String instCode = pi.getInstCode();
- List finished = historyService.createHistoricActivityInstanceQuery()
- .finished()
- .processInstanceId(instCode)
- .orderByHistoricActivityInstanceEndTime()
- .asc()
- .list();
- List unfinished = historyService.createHistoricActivityInstanceQuery()
- .unfinished()
- .processInstanceId(instCode)
- .orderByHistoricActivityInstanceStartTime()
- .asc()
- .list();
- //已经完成的没有 未完成的有 则可计算
- if (CollUtil.isNotEmpty(unfinished) && CollUtil.isEmpty(finished)) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }
-
- //已经开始审批
- private boolean searchSchemaReviewedFlow(String projectCode) {
- Project project = projectService.getProjectByCode(projectCode);
- if (Objects.isNull(project)) {
- return Boolean.FALSE;
- }
- List allVersionProjectId = projectService.allVersionProjectIds(project.getProjectCode());
- ProjectInst pi = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class)
- .in(ProjectInst::getProjectId, allVersionProjectId)
- .eq(ProjectInst::getInstType, InstTypeEnum.CONSTRUCTION_PLAN_REVIEW.getCode())
- .last(BizConst.LIMIT_1));
- if (Objects.isNull(pi)) {
- return Boolean.FALSE;
- }
- String instCode = pi.getInstCode();
- List finished = historyService.createHistoricActivityInstanceQuery()
- .finished()
- .processInstanceId(instCode)
- .orderByHistoricActivityInstanceEndTime()
- .asc()
- .list();
- //已经完成的 则可计算
- if (CollUtil.isNotEmpty(finished)) {
- return Boolean.TRUE;
- }
- return Boolean.FALSE;
- }
-
- /**
- * 计算环节滞后项目
- *
- * @param projects
- * @return
- */
- private Integer computeLagging(List projects) {
- List projectCodes = projects.stream().map(Project::getProjectCode).collect(Collectors.toList());
- Map map = projects.stream().collect(Collectors.toMap(Project::getProjectCode, p -> p));
- List records = Lists.newArrayList();
- if (CollUtil.isNotEmpty(projectCodes)) {
- records = earlyWarningRecordsService.list(Wrappers.lambdaQuery(WflowEarlyWarningRecords.class)
- .in(WflowEarlyWarningRecords::getProjectCode, projectCodes));
- }
- return records.stream().mapToInt(r -> {
- if (!map.containsKey(r.getProjectCode())) {
- return 0;
- }
- Project project = map.get(r.getProjectCode());
- //如果状态 相等 说明预警了 但是没处理 +1
- if (Objects.nonNull(project.getStatus()) && Objects.nonNull(r.getProjectStatus()) &&
- project.getStatus().equals(r.getProjectStatus())) {
- return 1;
- }
- return 0;
- }).sum();
- }
-
- private void buildMonitorRise(CockpitStats cockpitStats, CockpitStats thisYearData, CockpitStats lastYearData) {
- if (Objects.isNull(thisYearData) || Objects.isNull(lastYearData)) {
- return;
- }
- cockpitStats.setMonitorOverdueConstructionProjectsRise(BizUtils.computeRise(thisYearData.getMonitorOverdueConstructionProjectsNum(),
- lastYearData.getMonitorOverdueConstructionProjectsNum()));
- cockpitStats.setMonitorLaggingProjectsRise(BizUtils.computeRise(thisYearData.getMonitorLaggingProjectsNum(),
- lastYearData.getMonitorLaggingProjectsNum()));
- cockpitStats.setMonitorRejectedApproveProjectsRise(BizUtils.computeRise(thisYearData.getMonitorRejectedApproveProjectsNum(),
- lastYearData.getMonitorRejectedApproveProjectsNum()));
- cockpitStats.setMonitorRejectedPreReviewProjectsRise(BizUtils.computeRise(thisYearData.getMonitorRejectedPreReviewProjectsNum(),
- lastYearData.getMonitorRejectedPreReviewProjectsNum()));
- cockpitStats.setMonitorAcceptConditionsNotStandardsRise(BizUtils.computeRise(thisYearData.getMonitorAcceptConditionsNotStandardsNum(),
- lastYearData.getMonitorAcceptConditionsNotStandardsNum()));
- }
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/ProjectStatusFlowTask.java b/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/ProjectStatusFlowTask.java
deleted file mode 100644
index 42c0bbc..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/scheduler/task/ProjectStatusFlowTask.java
+++ /dev/null
@@ -1,88 +0,0 @@
-package com.hz.pm.api.scheduler.task;
-
-import cn.hutool.core.collection.CollUtil;
-import com.alibaba.fastjson.JSON;
-import com.baomidou.mybatisplus.core.toolkit.Wrappers;
-import com.hz.pm.api.projectlib.model.entity.Project;
-import com.hz.pm.api.projectlib.service.IProjectService;
-import com.hz.pm.api.staging.contants.StagingContant;
-import com.hz.pm.api.staging.model.entity.ProjectStaging;
-import com.hz.pm.api.staging.service.IProjectStagingService;
-import com.hz.pm.api.staging.utils.ProjectStatusFlowMapUtil;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.stereotype.Component;
-
-import java.net.InetAddress;
-import java.net.UnknownHostException;
-import java.time.LocalDateTime;
-import java.util.List;
-import java.util.Objects;
-import java.util.function.Function;
-
-/**
- * @Classname ProjectStatusFlowTask
- * @Description
- * @Date 2023/2/20 10:12
- * @Author PoffyZhang
- */
-@Slf4j
-@Component
-@RequiredArgsConstructor
-public class ProjectStatusFlowTask {
-
- private final IProjectStagingService projectStagingService;
-
- private final IProjectService projectService;
-
- @Value("${hostname:}")
- private String HOST_NAME;
-
- @Scheduled(cron = "0 */1 * * * ?")
- public void statusFlow() throws UnknownHostException {
- if (HOST_NAME.equals(InetAddress.getLocalHost().getHostName())) {
- //1. 定时取 项目暂存表的数据 去进行状态继续流转
- List stagingList = projectStagingService.list(Wrappers.lambdaQuery(ProjectStaging.class)
- .eq(ProjectStaging::getDead, Boolean.FALSE)
- .le(ProjectStaging::getNextTime, LocalDateTime.now())
- .le(ProjectStaging::getRetryTimes, StagingContant.Retry.MAX_RETRY_TIMES)
- .orderByAsc(ProjectStaging::getProjectId));
-
- log.info("需要状态流转的项目 size:{} :{}", stagingList.size(), JSON.toJSONString(stagingList));
- if (CollUtil.isEmpty(stagingList)) {
- log.info("没有需要状态流转的项目!");
- return;
- }
-
- //遍历
- for (ProjectStaging projectStaging : stagingList) {
- try {
- Project project = projectService.getById(projectStaging.getProjectId());
- if (Objects.isNull(project)) {
- log.info("此项目 【{}】 不存在", projectStaging.getProjectId());
- continue;
- }
- //2. 用函数map 定位到 状态流转的函数
- Function flowFunction = ProjectStatusFlowMapUtil.getFlowFunction(project.getStatus());
- if (flowFunction == null) {
- log.info("此项目 【{}】 当前状态 【{}】,没有对应流转函数", projectStaging.getProjectId(), project.getStatus());
- continue;
- }
- //执行对应的函数
- if (flowFunction.apply(project)) {
- //执行成功了 删除暂存的数据
- projectStagingService.removeById(projectStaging);
- }
- } catch (Exception e) {
- log.error("项目流转 异常 projectId:【" + projectStaging.getProjectId() + "】 异常内容:" + e.getMessage());
- } finally {
- //增加重试的次数 和下次扫描时间
- projectStagingService.addRetryTimes(projectStaging);
- }
- }
- }
- }
-
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/staging/utils/ProjectStatusFlowMapUtil.java b/hz-pm-api/src/main/java/com/hz/pm/api/staging/utils/ProjectStatusFlowMapUtil.java
deleted file mode 100644
index a3d5919..0000000
--- a/hz-pm-api/src/main/java/com/hz/pm/api/staging/utils/ProjectStatusFlowMapUtil.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package com.hz.pm.api.staging.utils;
-
-import com.google.common.collect.Maps;
-import com.hz.pm.api.projectdeclared.manage.ReviewByDeptJointManage;
-import com.hz.pm.api.projectdeclared.manage.ReviewByProvincialDeptManage;
-import com.hz.pm.api.projectlib.model.entity.Project;
-import com.hz.pm.api.projectlib.model.enumeration.status.ProjectStatus;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-import java.util.function.Function;
-
-/**
- * @Classname ProjectStatusFlowMapUtil
- * @Description 状态流转 事件函数MAP
- * @Date 2023/2/15 11:19
- * @Author PoffyZhang
- */
-@Component
-public class ProjectStatusFlowMapUtil {
-
- private static final Map> STATUS_FLOW_FUNCTION_MAP = Maps.newHashMap();
-
-
- public static Function getFlowFunction(Integer status){
- return STATUS_FLOW_FUNCTION_MAP.get(status);
- }
-
- /**
- * 初始化业务分派逻辑,代替了if-else部分
- * key: 枚举 状态值
- * value: lambda表达式,最终会获取发起实例的函数
- */
- public ProjectStatusFlowMapUtil(ReviewByProvincialDeptManage provincialDeptManage,
- ReviewByDeptJointManage reviewByDeptJointManage) {
- //省级部门联审
- STATUS_FLOW_FUNCTION_MAP.put(ProjectStatus.JOINT_REVIEW_BY_PROVINCIAL_DEPARTMENTS.getCode(),
- provincialDeptManage::startTheProcess);
- //部门联审
- STATUS_FLOW_FUNCTION_MAP.put(ProjectStatus.DEPARTMENT_JOINT_REVIEW.getCode(),
- reviewByDeptJointManage::startTheProcess);
- }
-
-}
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/handle/WithDrawHandle.java b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/handle/WithDrawHandle.java
index fab24ff..04bbc73 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/handle/WithDrawHandle.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/handle/WithDrawHandle.java
@@ -3,6 +3,7 @@ package com.hz.pm.api.todocenter.handle;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.google.common.collect.Lists;
import com.hz.pm.api.common.helper.UserInfoHelper;
import com.hz.pm.api.common.util.StrUtils;
import com.hz.pm.api.projectlib.model.entity.ProjectInst;
@@ -20,7 +21,6 @@ import com.wflow.workflow.bean.vo.ProcessProgressVo;
import com.wflow.workflow.enums.ProcessStatusEnum;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
-import org.assertj.core.util.Lists;
import org.flowable.bpmn.model.*;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RepositoryService;
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java
index 161c25c..866bbfa 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/todocenter/manage/HandlerManage.java
@@ -204,12 +204,6 @@ public class HandlerManage {
case DECLARED_APPROVED_RECORD_AUDITING:
updatePassProjectStatus(userId, project);
break;
- case SCHEME_UNDER_REVIEW:
- // 当前项目状态是终验审核中
- updatePassProjectStatus(userId, project);
- // 判断是否 保存建设建议信息
- saveConstructionSuggestInfo(instance.getId(), project);
- break;
case ON_PURCHASING:
case TO_BE_FIRST_INSPECTED:
case ON_PILOT_RUNNING:
@@ -443,8 +437,6 @@ public class HandlerManage {
case PRE_APPLYING:
// 当前项目状态是部门联审中
case DEPARTMENT_JOINT_REVIEW:
- // 当前项目状态是方案评审中
- case SCHEME_UNDER_REVIEW:
updateWithdrawProjectStatus(userId, project);
break;
default:
diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/converter/WorkbenchConverter.java b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/converter/WorkbenchConverter.java
index cdc76db..af5fb0d 100644
--- a/hz-pm-api/src/main/java/com/hz/pm/api/workbench/converter/WorkbenchConverter.java
+++ b/hz-pm-api/src/main/java/com/hz/pm/api/workbench/converter/WorkbenchConverter.java
@@ -16,9 +16,12 @@ import java.util.Objects;
*/
public class WorkbenchConverter {
- public static WorkbenchVO.DeclaredStatistics convert(DeclaredProjectStatisticsPO po,DeclaredProjectStatisticsPO lastYearPo) {
- WorkbenchVO.DeclaredStatistics res = BeanUtil.copyProperties(po,WorkbenchVO.DeclaredStatistics.class);
- if(Objects.nonNull(lastYearPo)){
+ private WorkbenchConverter() {
+ }
+
+ public static WorkbenchVO.DeclaredStatistics convert(DeclaredProjectStatisticsPO po, DeclaredProjectStatisticsPO lastYearPo) {
+ WorkbenchVO.DeclaredStatistics res = BeanUtil.copyProperties(po, WorkbenchVO.DeclaredStatistics.class);
+ if (Objects.nonNull(lastYearPo)) {
res.setDeclaredAmountLastYear(lastYearPo.getDeclaredAmount());
res.setApprovalAmountLastYear(lastYearPo.getApprovalAmount());
}
@@ -32,4 +35,5 @@ public class WorkbenchConverter {
res.setProjectName(vo.getProjectName());
return res;
}
+
}
diff --git a/pom.xml b/pom.xml
index e1bfa25..70d2e47 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,16 +27,6 @@
- org.apache.poi
- poi
- 5.2.2
-
-
- org.apache.poi
- poi-ooxml
- 5.2.2
-
-
com.alibaba
fastjson
${fastjson.version}
@@ -87,7 +77,7 @@
com.alibaba
easyexcel-core
- 3.1.2
+ 3.3.2
com.ningdatech
@@ -116,11 +106,6 @@
2.0.1.RELEASE
- cn.afterturn
- easypoi-base
- 4.4.0
-
-
com.github.oshi
oshi-core
6.4.0