Browse Source

驾驶舱 地图项目数

master
PoffyZhang 1 year ago
parent
commit
b71586ec92
9 changed files with 139 additions and 6 deletions
  1. +17
    -5
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/handle/CockpitStatsHandler.java
  2. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/CockpitStatsManage.java
  3. +9
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/ConstructionPlanController.java
  4. +42
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/ConstructionPlanManage.java
  5. +41
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/model/dto/ContructionSuggestionsDTO.java
  6. +9
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
  7. +9
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectDetailVO.java
  8. +9
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java
  9. +2
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/ProcessProgressDetailVo.java

+ 17
- 5
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/handle/CockpitStatsHandler.java View File

@@ -1,9 +1,11 @@
package com.ningdatech.pmapi.dashboard.handle; package com.ningdatech.pmapi.dashboard.handle;


import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.ningdatech.pmapi.common.constant.RegionConst; import com.ningdatech.pmapi.common.constant.RegionConst;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper; import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
import com.ningdatech.pmapi.dashboard.constant.DashboardConstant;
import com.ningdatech.pmapi.dashboard.model.entity.CockpitStats; import com.ningdatech.pmapi.dashboard.model.entity.CockpitStats;
import com.ningdatech.pmapi.dashboard.model.vo.CockpitStatsVO; import com.ningdatech.pmapi.dashboard.model.vo.CockpitStatsVO;
import com.ningdatech.pmapi.dashboard.service.ICockpitStatsService; import com.ningdatech.pmapi.dashboard.service.ICockpitStatsService;
@@ -34,7 +36,7 @@ public class CockpitStatsHandler {


private final ICockpitStatsService cockpitStatsService; private final ICockpitStatsService cockpitStatsService;


public CockpitStatsVO convertCockpitStats(CockpitStats cockpitStats) {
public CockpitStatsVO convertCockpitStats(CockpitStats cockpitStats,Integer year) {
CockpitStatsVO res = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.class); CockpitStatsVO res = BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.class);


if(Objects.isNull(cockpitStats)){ if(Objects.isNull(cockpitStats)){
@@ -47,7 +49,7 @@ public class CockpitStatsHandler {
//顶部数据 //顶部数据
res.setTopData(convertTopData(cockpitStats)); res.setTopData(convertTopData(cockpitStats));
//地图数据 //地图数据
res.setMapProjectData(convertMapProjectsData(cockpitStats));
res.setMapProjectData(convertMapProjectsData(cockpitStats,year));
//项目项目数据 //项目项目数据
res.setStatusProjectsData(convertStatusProjectsData(cockpitStats)); res.setStatusProjectsData(convertStatusProjectsData(cockpitStats));
//项目效益 优秀项目 //项目效益 优秀项目
@@ -105,16 +107,26 @@ public class CockpitStatsHandler {
return BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.StatusProjectsData.class); return BeanUtil.copyProperties(cockpitStats,CockpitStatsVO.StatusProjectsData.class);
} }


private List<CockpitStatsVO.MapProjectsData> convertMapProjectsData(CockpitStats cockpitStats) {
private List<CockpitStatsVO.MapProjectsData> convertMapProjectsData(CockpitStats cockpitStats,Integer year) {
List<CockpitStatsVO.MapProjectsData> mapProjectsDatas = Lists.newArrayList(); List<CockpitStatsVO.MapProjectsData> mapProjectsDatas = Lists.newArrayList();
List<RegionDTO> regions = regionCacheHelper.listChildren(RegionConst.RC_LS, RegionConst.RL_CITY); List<RegionDTO> regions = regionCacheHelper.listChildren(RegionConst.RC_LS, RegionConst.RL_CITY);
regions = regions.stream().filter(r -> r.getRegionLevel() != 2).sorted(Comparator.comparing(RegionDTO::getRegionCode)).collect(Collectors.toList()); regions = regions.stream().filter(r -> r.getRegionLevel() != 2).sorted(Comparator.comparing(RegionDTO::getRegionCode)).collect(Collectors.toList());

List<CockpitStats> cockpitStatsAll = cockpitStatsService.list(Wrappers.lambdaQuery(CockpitStats.class)
.eq(Objects.nonNull(year), CockpitStats::getYear, year)
.eq(Objects.isNull(year), CockpitStats::getYear, DashboardConstant.CockpitStats.NONE_YEAR));
Map<String, Integer> totalMap = cockpitStatsAll.stream().filter(c -> Objects.nonNull(c.getRegionCode()) && Objects.nonNull(c.getProjectsTotal()))
.collect(Collectors.toMap(c -> c.getRegionCode(), c -> c.getProjectsTotal()));

for(RegionDTO region : regions){ for(RegionDTO region : regions){
CockpitStatsVO.MapProjectsData mapProjectsData = new CockpitStatsVO.MapProjectsData(); CockpitStatsVO.MapProjectsData mapProjectsData = new CockpitStatsVO.MapProjectsData();
mapProjectsData.setRegionCode(region.getRegionCode()); mapProjectsData.setRegionCode(region.getRegionCode());
mapProjectsData.setRegionName(region.getRegionName()); mapProjectsData.setRegionName(region.getRegionName());
//TODO: 项目数据
mapProjectsData.setProjectsNum(0);
if(totalMap.containsKey(mapProjectsData.getRegionCode())){
mapProjectsData.setProjectsNum(totalMap.get(mapProjectsData.getRegionCode()));
}else{
mapProjectsData.setProjectsNum(0);
}
mapProjectsDatas.add(mapProjectsData); mapProjectsDatas.add(mapProjectsData);
} }
return mapProjectsDatas; return mapProjectsDatas;


+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/CockpitStatsManage.java View File

@@ -47,6 +47,6 @@ public class CockpitStatsManage {
return new CockpitStatsVO(); return new CockpitStatsVO();
} }


return convertCockpitStats.convertCockpitStats(cockpitStats);
return convertCockpitStats.convertCockpitStats(cockpitStats,year);
} }
} }

+ 9
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/controller/ConstructionPlanController.java View File

@@ -4,6 +4,7 @@ import com.ningdatech.basic.model.PageVo;
import com.ningdatech.log.annotation.WebLog; import com.ningdatech.log.annotation.WebLog;
import com.ningdatech.pmapi.common.util.ExcelDownUtil; import com.ningdatech.pmapi.common.util.ExcelDownUtil;
import com.ningdatech.pmapi.projectdeclared.manage.ConstructionPlanManage; import com.ningdatech.pmapi.projectdeclared.manage.ConstructionPlanManage;
import com.ningdatech.pmapi.projectdeclared.model.dto.ContructionSuggestionsDTO;
import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO; import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO;
import com.ningdatech.pmapi.projectdeclared.model.req.ConstrctionPlanListReq; import com.ningdatech.pmapi.projectdeclared.model.req.ConstrctionPlanListReq;
import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO; import com.ningdatech.pmapi.projectlib.model.vo.ProjectLibListItemVO;
@@ -52,4 +53,12 @@ public class ConstructionPlanController {
public void exportList(ConstrctionPlanListReq planReq, HttpServletResponse response) { public void exportList(ConstrctionPlanListReq planReq, HttpServletResponse response) {
ExcelDownUtil.downXls(response, planReq, constructionPlanManage::exportList); ExcelDownUtil.downXls(response, planReq, constructionPlanManage::exportList);
} }

@ApiOperation(value = "建设方案专家建议", notes = "建设方案专家建议")
@WebLog("建设方案专家建议")
@PostMapping("/construction-suggestions")
public String constructionSuggestions(@Validated @RequestBody ContructionSuggestionsDTO dto) {
constructionPlanManage.constructionSuggestions(dto);
return "专家建设方案建议保存成功";
}
} }

+ 42
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/ConstructionPlanManage.java View File

@@ -1,9 +1,11 @@
package com.ningdatech.pmapi.projectdeclared.manage; package com.ningdatech.pmapi.projectdeclared.manage;


import cn.hutool.core.collection.CollUtil;
import com.alibaba.excel.EasyExcel; import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils; import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo; import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.NdDateUtils; import com.ningdatech.basic.util.NdDateUtils;
@@ -18,6 +20,7 @@ import com.ningdatech.pmapi.common.statemachine.util.StateMachineUtils;
import com.ningdatech.pmapi.common.util.ExcelDownUtil; import com.ningdatech.pmapi.common.util.ExcelDownUtil;
import com.ningdatech.pmapi.common.util.ExcelExportStyle; import com.ningdatech.pmapi.common.util.ExcelExportStyle;
import com.ningdatech.pmapi.projectdeclared.model.dto.ConstructionPlanExportDTO; import com.ningdatech.pmapi.projectdeclared.model.dto.ConstructionPlanExportDTO;
import com.ningdatech.pmapi.projectdeclared.model.dto.ContructionSuggestionsDTO;
import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO; import com.ningdatech.pmapi.projectdeclared.model.dto.DefaultDeclaredDTO;
import com.ningdatech.pmapi.projectdeclared.model.req.ConstrctionPlanListReq; import com.ningdatech.pmapi.projectdeclared.model.req.ConstrctionPlanListReq;
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum; import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
@@ -47,6 +50,8 @@ import com.wflow.workflow.service.ProcessModelService;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.flowable.engine.HistoryService;
import org.flowable.engine.history.HistoricActivityInstance;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@@ -82,6 +87,7 @@ public class ConstructionPlanManage {
private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; private final DefaultDeclaredProjectManage defaultDeclaredProjectManage;
private final NoticeManage noticeManage; private final NoticeManage noticeManage;
private final RegionCacheHelper regionCacheHelper; private final RegionCacheHelper regionCacheHelper;
private final HistoryService historyService;


/** /**
* 建设方案 * 建设方案
@@ -326,4 +332,40 @@ public class ConstructionPlanManage {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }

/**
* 专家建设方案建议 暂存 等流程成功后 保存到项目
* @param dto
*/
public void constructionSuggestions(ContructionSuggestionsDTO dto) {
String nodeId = dto.getNodeId();
List<HistoricActivityInstance> hai = historyService.createHistoricActivityInstanceQuery()
.activityId(nodeId)
.orderByHistoricActivityInstanceStartTime()
.asc().list();
if(CollUtil.isEmpty(hai)){
throw new BizException("该节点的流程不存在!");
}
//实例ID
String processInstanceId = hai.get(0).getProcessInstanceId();

Project project = projectService.getProjectByCode(dto.getProjectCode());
if(Objects.isNull(project)){
throw new BizException("该项目不存在!");
}
ProjectInst projectInst = projectInstService.getOne(Wrappers.lambdaQuery(ProjectInst.class)
.eq(ProjectInst::getInstCode, processInstanceId)
.eq(ProjectInst::getProjectId,project.getId())
.last(BizConst.LIMIT_1));
if(Objects.isNull(projectInst)){
throw new BizException("该流程的项目关联信息不存在!");
}

if(InstTypeEnum.CONSTRUCTION_PLAN_REVIEW.getCode().equals(projectInst.getInstType())){
throw new BizException("此流程不是建设方案流程 保存失败!");
}


}

} }

+ 41
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/model/dto/ContructionSuggestionsDTO.java View File

@@ -0,0 +1,41 @@
package com.ningdatech.pmapi.projectdeclared.model.dto;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.math.BigDecimal;

/**
* @Classname ContructionSuggestionsDTO
* @Description
* @Date 2023/5/30 15:35
* @Author PoffyZhang
*/
@Data
@ApiModel(value = "专家建设建议", description = "")
public class ContructionSuggestionsDTO {

private static final long serialVersionUID = 1L;

@ApiModelProperty("nodeId")
@NotNull(message = "nodeId不能为空")
private String nodeId;

@ApiModelProperty("项目编号")
@NotNull(message = "项目编号不能为空")
private String projectCode;

@ApiModelProperty("建议项目总投资")
@NotNull(message = "建议项目总投资不能为空")
private BigDecimal proposeTotalInvest;

@ApiModelProperty("建议年度预算")
@NotNull(message = "建议年度预算不能为空")
private BigDecimal proposeAnnualBudget;

@ApiModelProperty("建议评审意见附件")
@NotBlank(message = "建议评审意见附件不能为空")
private String proposeAttachFiles;
}

+ 9
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java View File

@@ -543,4 +543,13 @@ public class Project implements Serializable {


@ApiModelProperty("实际成效指标") @ApiModelProperty("实际成效指标")
private String actualPerformanceIndicators; private String actualPerformanceIndicators;

@ApiModelProperty("建议项目总投资")
private BigDecimal proposeTotalInvest;

@ApiModelProperty("建议年度预算")
private BigDecimal proposeAnnualBudget;

@ApiModelProperty("建议评审意见附件")
private String proposeAttachFiles;
} }

+ 9
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectDetailVO.java View File

@@ -525,4 +525,13 @@ public class ProjectDetailVO {


@ApiModelProperty("终验信息 IRS档案") @ApiModelProperty("终验信息 IRS档案")
private List<ProtraitProjectOutputVO> finalIrsApps; private List<ProtraitProjectOutputVO> finalIrsApps;

@ApiModelProperty("建议项目总投资")
private BigDecimal proposeTotalInvest;

@ApiModelProperty("建议年度预算")
private BigDecimal proposeAnnualBudget;

@ApiModelProperty("建议评审意见附件")
private String proposeAttachFiles;
} }

+ 9
- 0
pmapi/src/main/java/com/ningdatech/pmapi/todocenter/manage/TodoCenterManage.java View File

@@ -68,6 +68,7 @@ import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails; import com.ningdatech.pmapi.user.security.auth.model.UserInfoDetails;
import com.ningdatech.pmapi.user.util.LoginUserUtil; import com.ningdatech.pmapi.user.util.LoginUserUtil;
import com.wflow.contants.HisProInsEndActId; import com.wflow.contants.HisProInsEndActId;
import com.wflow.contants.ProcessConstant;
import com.wflow.exception.BusinessException; import com.wflow.exception.BusinessException;
import com.wflow.workflow.bean.dto.ReqAuditOpinionSaveDTO; import com.wflow.workflow.bean.dto.ReqAuditOpinionSaveDTO;
import com.wflow.workflow.bean.dto.ReqProcessHandlerDTO; import com.wflow.workflow.bean.dto.ReqProcessHandlerDTO;
@@ -570,12 +571,20 @@ public class TodoCenterManage {
res.setProjectId(projectId); res.setProjectId(projectId);
res.setCanWithdraw(withDrawHandle.checkCanWithdraw(instanceId, progressInstanceDetail, request.getTaskId())); res.setCanWithdraw(withDrawHandle.checkCanWithdraw(instanceId, progressInstanceDetail, request.getTaskId()));
res.setIsHighLine(isHighLine); res.setIsHighLine(isHighLine);
res.setConstructionSuggestions(checkConstructionSuggestionsByNodeId(nodeId));
passHandle.checkCanPassOrSeal(request.getInstanceId(), request.getTaskId(), employeeCode, res); passHandle.checkCanPassOrSeal(request.getInstanceId(), request.getTaskId(), employeeCode, res);
//是不是被 驳回|退回 //是不是被 驳回|退回
res.setIsChange(todoService.isChangeRecord(projectId)); res.setIsChange(todoService.isChangeRecord(projectId));
return res; return res;
} }


private Boolean checkConstructionSuggestionsByNodeId(String nodeId) {
if(StringUtils.isNotBlank(nodeId)){
return nodeId.endsWith(StrPool.DASH + ProcessConstant.Field.CONSTRUCTION);
}
return Boolean.FALSE;
}

/** /**
* 筛选 当前登录人 是不是 上级条线单位的审批 * 筛选 当前登录人 是不是 上级条线单位的审批
* *


+ 2
- 0
pmapi/src/main/java/com/ningdatech/pmapi/todocenter/model/vo/ProcessProgressDetailVo.java View File

@@ -63,4 +63,6 @@ public class ProcessProgressDetailVo {
* 当前项目 是不是被 驳回|退回过 * 当前项目 是不是被 驳回|退回过
*/ */
private Boolean isChange = Boolean.FALSE; private Boolean isChange = Boolean.FALSE;

private Boolean constructionSuggestions = Boolean.FALSE;
} }

Loading…
Cancel
Save