Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/master'

tags/24080901
WendyYang 1 anno fa
parent
commit
b811e5fa60
26 ha cambiato i file con 593 aggiunte e 111 eliminazioni
  1. +22
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/common/constant/RegionConst.java
  2. +2
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java
  3. +12
    -6
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/entity/CockpitStats.java
  4. +6
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/CockpitStatsVO.java
  5. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java
  6. +161
    -54
      pmapi/src/main/java/com/ningdatech/pmapi/gov/manage/GovProjectCollectionManage.java
  7. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovBizProjectBaseinfoDTO.java
  8. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectBaseinfoDTO.java
  9. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovBizProjectBaseinfo.java
  10. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovOperationProjectBaseinfo.java
  11. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovBizProjectBaseinfoVO.java
  12. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectBaseinfoVO.java
  13. +34
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/gov/utils/ProjectConvertUtil.java
  14. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/model/entity/ProjectDraft.java
  15. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/model/vo/ProjectDraftVO.java
  16. +61
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java
  17. +1
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectRenewalFundManage.java
  18. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java
  19. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/entity/Project.java
  20. +3
    -0
      pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/vo/ProjectDetailVO.java
  21. +2
    -1
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java
  22. +82
    -12
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/CockpitStatsStatisticsTask.java
  23. +58
    -9
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java
  24. +33
    -12
      pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java
  25. +79
    -10
      pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java
  26. +4
    -4
      pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java

+ 22
- 0
pmapi/src/main/java/com/ningdatech/pmapi/common/constant/RegionConst.java Vedi File

@@ -1,5 +1,9 @@
package com.ningdatech.pmapi.common.constant;

import com.google.common.collect.Lists;

import java.util.List;

/**
* <p>
* RegionConst
@@ -44,6 +48,24 @@ public interface RegionConst {
String RC_ZJ = "330000";

String NINE_CODE_LAST = "000";
//莲都
String LD = "331102";
//青田
String QT = "331121";
//缙云
String JY = "331122";
//遂昌
String SC = "331123";
//松阳
String SY = "331124";
//云和
String YH = "331125";
//庆元
String QY = "331126";
String QN = "331127";
String LQ = "331181";

List<String> LS_ARR = Lists.newArrayList(RC_LS,LS_KF,LD,QT,JY,SC,SY,YH,QY,QN,LQ);

//----------------------------------------地区父级ID(缩写PID)---------------------------------------------------------



+ 2
- 0
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/manage/DashboardProjectManage.java Vedi File

@@ -396,6 +396,7 @@ public class DashboardProjectManage {
}
projectInfo.setProjectIntroduction(apply.getBaseProjIntro());
projectInfo.setBuildCycle(apply.getBaseProjDuration());
projectInfo.setApprovalAmount(apply.getBaseProjTotalAmount());
}
projectInfo.setProjectCode(projectCode);
projectInfo.setProjectName(baseInfo.getBaseProjName());
@@ -416,6 +417,7 @@ public class DashboardProjectManage {
}
projectInfo.setProjectIntroduction(apply.getBaseProjIntro());
projectInfo.setBuildCycle(apply.getBaseProjDuration());
projectInfo.setApprovalAmount(apply.getBaseProjTotalAmount());
}
projectInfo.setProjectCode(projectCode);
projectInfo.setProjectName(operationBase.getBaseProjName());


+ 12
- 6
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/entity/CockpitStats.java Vedi File

@@ -101,27 +101,33 @@ public class CockpitStats implements Serializable {
@ApiModelProperty("专家-总人数")
private Integer expertTotalNum = 0;

@ApiModelProperty("专家-方案合理性")
@ApiModelProperty("专家-总人数-包含这些标签的专家总人数")
private Integer specialExpertNum = 0;

@ApiModelProperty("专家-方案合理性-擅长")
private Integer expertPlanRationalityNum = 0;

@ApiModelProperty("专家-计数可行性评估")
@ApiModelProperty("专家-计数可行性评估-擅长")
private Integer expertTechnicalFeasibilityAssessmentNum = 0;

@ApiModelProperty("专家-信创")
@ApiModelProperty("专家-信创-擅长")
private Integer expertXinchuangNum = 0;

@ApiModelProperty("专家-软硬件核价")
@ApiModelProperty("专家-软硬件核价-擅长")
private Integer expertSoftHardPricingNum = 0;

@ApiModelProperty("专家-党政信息")
@ApiModelProperty("专家-党政信息-擅长")
private Integer expertPartyGovInfoNum = 0;

@ApiModelProperty("专家-网络安全")
@ApiModelProperty("专家-网络安全-擅长")
private Integer expertNetworkSecurityNum = 0;

@ApiModelProperty("专家-信息化专家")
private Integer expertPromotionInfoTechnologyNum = 0;

@ApiModelProperty("专家-信创专家")
private Integer expertXinchuangOtherNum = 0;

@ApiModelProperty("专家-财务专家")
private Integer expertFinancialNum = 0;



+ 6
- 0
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/CockpitStatsVO.java Vedi File

@@ -150,6 +150,9 @@ public class CockpitStatsVO implements Serializable {
@ApiModelProperty("专家-总人数")
private Integer expertTotalNum;

@ApiModelProperty("专家-总人数-包含这些标签的专家总人数")
private Integer specialExpertNum;

@ApiModelProperty("专家-方案合理性 数量")
private Integer expertPlanRationalityNum;

@@ -173,6 +176,9 @@ public class CockpitStatsVO implements Serializable {

@ApiModelProperty("专家-财务专家 数量")
private Integer expertFinancialNum;

@ApiModelProperty("专家-信创专家 数量")
private Integer expertXinchuangOtherNum;
}

@Data


+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/dashboard/model/vo/ProtraitProjectInfoVO.java Vedi File

@@ -54,5 +54,8 @@ public class ProtraitProjectInfoVO {

@ApiModelProperty("项目状态情况")
private List<ProtraitProjectStatusSituationVO> statusSituation;

@ApiModelProperty("系统定位")
private String systemPosition;
}


+ 161
- 54
pmapi/src/main/java/com/ningdatech/pmapi/gov/manage/GovProjectCollectionManage.java Vedi File

@@ -15,6 +15,7 @@ import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.function.VUtils;
import com.ningdatech.basic.model.PageVo;
import com.ningdatech.basic.util.StrPool;
import com.ningdatech.file.service.FileService;
import com.ningdatech.pmapi.common.constant.BizConst;
import com.ningdatech.pmapi.common.constant.RegionConst;
import com.ningdatech.pmapi.common.helper.RegionCacheHelper;
@@ -58,6 +59,7 @@ import io.swagger.annotations.ApiModelProperty;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.util.IOUtils;
import org.flowable.engine.HistoryService;
import org.flowable.engine.RuntimeService;
import org.springframework.beans.factory.annotation.Autowired;
@@ -70,10 +72,8 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;

import java.io.*;
import java.lang.reflect.Field;
import java.time.LocalDate;
import java.time.LocalDateTime;
@@ -121,6 +121,8 @@ public class GovProjectCollectionManage {

private final ThreadPoolTaskScheduler threadPoolTaskScheduler;

private final FileService fileService;

@Value("${project.push-url}")
private String pushUrl;

@@ -1695,7 +1697,9 @@ public class GovProjectCollectionManage {
StringJoiner sj = convertAndUpload(procure.getBiddingFile());
saveProcure.setBiddingFilePdf(sj.toString());
}
if(checkFieldNotPdf(procure.getPurchaseContract(),o,"purchaseContract")){
Boolean purchaseContract = checkFieldNotPdf(procure.getPurchaseContract(), o, "purchaseContract");
log.info("是否转换 采购合同 purchaseContract:{}",purchaseContract);
if(purchaseContract){
StringJoiner sj = convertAndUpload(procure.getPurchaseContract());
saveProcure.setPurchaseContractPdf(sj.toString());
}
@@ -1710,9 +1714,25 @@ public class GovProjectCollectionManage {
JSONArray fileArray = JSON.parseArray(bpb);
fileArray.forEach(j -> {
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(j));
byte[] btyes = wpsConvertManage.downloadToPdfStream(jsonObject.getLong("id"));
String suffix = jsonObject.getString("suffix");
//如果已经是PDF 就不用转换了
byte[] btyes = null;
String originalFileName = jsonObject.getString("originalFileName");
if(StringUtils.isNotBlank(suffix) && suffix.equals("pdf")){
com.ningdatech.file.entity.File file = fileService.getById(jsonObject.getLong("id"));
if(Objects.isNull(file)){
throw new RuntimeException("转换PDF文件失败:" + originalFileName);
}
InputStream inputStream = fileService.getFileInputStream(file);
try {
btyes = IOUtils.toByteArray(inputStream);
} catch (IOException e) {
throw new RuntimeException("转换PDF文件失败:" + originalFileName,e);
}
}else{
btyes = wpsConvertManage.downloadToPdfStream(jsonObject.getLong("id"));
}

if(!BizConst.DEV.equals(active)){
originalFileName = originalFileName.replace(StrPool.DOT + suffix, ".pdf");
}
@@ -1787,69 +1807,156 @@ public class GovProjectCollectionManage {
if(CollUtil.isEmpty(baseProjIds)){
throw new BizException("项目编号不能为空");
}
Integer successNum = 0;
for(String baseProjId : baseProjIds){
//两种情况
//1.项目归集
GovBizProjectBaseinfo baseinfo = baseinfoService.getOne(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class)
.eq(GovBizProjectBaseinfo::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectBaseinfo::getTongTime)
.last(BizConst.LIMIT_1));
GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class)
.eq(GovBizProjectApply::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectApply::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.isNull(baseinfo)){
System.out.println("项目不存在 直接下一个");
continue;
if(Objects.nonNull(baseinfo)){
rebuildGuiji(baseProjId);
successNum ++;
}
GovBizProjectSaveDTO saveDTO = new GovBizProjectSaveDTO();
saveDTO.setApply(BeanUtil.copyProperties(apply, GovBizProjectApplyDTO.class));
saveDTO.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovBizProjectBaseinfoDTO.class));
String newProjId = generateProjectCodeUtil.generateProjectCode(saveDTO);

baseinfo.setBaseProjId(newProjId);
baseinfoService.updateById(baseinfo);
apply.setBaseProjId(newProjId);
projectApplyService.updateById(apply);

GovBizProjectApprove approve = approveService.getOne(Wrappers.lambdaUpdate(GovBizProjectApprove.class)
.eq(GovBizProjectApprove::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectApprove::getTongTime)
//2.运维备案
GovOperationProjectBaseinfo operation = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class)
.eq(GovOperationProjectBaseinfo::getBaseProjId, baseProjId)
.orderByDesc(GovOperationProjectBaseinfo::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(approve)){
approve.setBaseProjId(newProjId);
approveService.updateById(approve);
if(Objects.nonNull(operation)){
rebuildOperation(baseProjId);
successNum ++;
}
}
return "运行成功 重新生成" + successNum + "个项目编号";
}

private void rebuildGuiji(String baseProjId) {
GovBizProjectBaseinfo baseinfo = baseinfoService.getOne(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class)
.eq(GovBizProjectBaseinfo::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectBaseinfo::getTongTime)
.last(BizConst.LIMIT_1));
GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class)
.eq(GovBizProjectApply::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectApply::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.isNull(baseinfo)){
System.out.println("项目不存在 直接下一个");
return;
}
GovBizProjectSaveDTO saveDTO = new GovBizProjectSaveDTO();
saveDTO.setApply(BeanUtil.copyProperties(apply, GovBizProjectApplyDTO.class));
saveDTO.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovBizProjectBaseinfoDTO.class));
String newProjId = generateProjectCodeUtil.generateProjectCode(saveDTO);

baseinfo.setBaseProjId(newProjId);
baseinfoService.updateById(baseinfo);
apply.setBaseProjId(newProjId);
projectApplyService.updateById(apply);

GovBizProjectCimplement cimplement = cimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectCimplement.class)
.eq(GovBizProjectCimplement::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectCimplement::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(cimplement)){
cimplement.setBaseProjId(newProjId);
cimplement.setBaseBidCode(newProjId);
cimplementService.updateById(cimplement);
}
GovBizProjectApprove approve = approveService.getOne(Wrappers.lambdaUpdate(GovBizProjectApprove.class)
.eq(GovBizProjectApprove::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectApprove::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(approve)){
approve.setBaseProjId(newProjId);
approveService.updateById(approve);
}

GovBizProjectMimplement mimplement = mimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectMimplement.class)
.eq(GovBizProjectMimplement::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectMimplement::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(mimplement)){
mimplement.setBaseProjId(newProjId);
mimplement.setBaseBidCode(newProjId);
mimplementService.updateById(mimplement);
}

List<GovBizProjectProcure> procures = procureService.list(Wrappers.lambdaUpdate(GovBizProjectProcure.class)
.eq(GovBizProjectProcure::getBaseProjId, baseProjId));
GovBizProjectCimplement cimplement = cimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectCimplement.class)
.eq(GovBizProjectCimplement::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectCimplement::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(cimplement)){
cimplement.setBaseProjId(newProjId);
cimplement.setBaseBidCode(newProjId);
cimplementService.updateById(cimplement);
}

for(GovBizProjectProcure procure : procures){
procure.setBaseProjId(newProjId);
procure.setBaseBidCode(newProjId + "-" + procure.getBaseBidCode().split("-")[1]);
procureService.updateById(procure);
}
GovBizProjectMimplement mimplement = mimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectMimplement.class)
.eq(GovBizProjectMimplement::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectMimplement::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(mimplement)){
mimplement.setBaseProjId(newProjId);
mimplement.setBaseBidCode(newProjId);
mimplementService.updateById(mimplement);
}

List<GovBizProjectProcure> procures = procureService.list(Wrappers.lambdaUpdate(GovBizProjectProcure.class)
.eq(GovBizProjectProcure::getBaseProjId, baseProjId));

for(GovBizProjectProcure procure : procures){
procure.setBaseProjId(newProjId);
procure.setBaseBidCode(newProjId + "-" + procure.getBaseBidCode().split("-")[1]);
procureService.updateById(procure);
}
}

private void rebuildOperation(String baseProjId) {
GovOperationProjectBaseinfo operationBase = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class)
.eq(GovOperationProjectBaseinfo::getBaseProjId, baseProjId)
.orderByDesc(GovOperationProjectBaseinfo::getTongTime)
.last(BizConst.LIMIT_1));
GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class)
.eq(GovBizProjectApply::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectApply::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.isNull(operationBase)){
System.out.println("运维备案项目不存在 直接下一个");
return;
}
GovOperationProjectSaveDTO saveDTO = new GovOperationProjectSaveDTO();
saveDTO.setApply(BeanUtil.copyProperties(apply, GovBizProjectApplyDTO.class));
saveDTO.setBaseinfo(BeanUtil.copyProperties(operationBase, GovOperationProjectBaseinfoDTO.class));
String newProjId = generateProjectCodeUtil.generateProjectCode(saveDTO);

operationBase.setBaseProjId(newProjId);
operationProjectBaseinfoService.updateById(operationBase);
apply.setBaseProjId(newProjId);
projectApplyService.updateById(apply);

GovBizProjectApprove approve = approveService.getOne(Wrappers.lambdaUpdate(GovBizProjectApprove.class)
.eq(GovBizProjectApprove::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectApprove::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(approve)){
approve.setBaseProjId(newProjId);
approveService.updateById(approve);
}


GovBizProjectCimplement cimplement = cimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectCimplement.class)
.eq(GovBizProjectCimplement::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectCimplement::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(cimplement)){
cimplement.setBaseProjId(newProjId);
cimplement.setBaseBidCode(newProjId);
cimplementService.updateById(cimplement);
}

GovBizProjectMimplement mimplement = mimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectMimplement.class)
.eq(GovBizProjectMimplement::getBaseProjId, baseProjId)
.orderByDesc(GovBizProjectMimplement::getTongTime)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(mimplement)){
mimplement.setBaseProjId(newProjId);
mimplement.setBaseBidCode(newProjId);
mimplementService.updateById(mimplement);
}

List<GovBizProjectProcure> procures = procureService.list(Wrappers.lambdaUpdate(GovBizProjectProcure.class)
.eq(GovBizProjectProcure::getBaseProjId, baseProjId));

for(GovBizProjectProcure procure : procures){
procure.setBaseProjId(newProjId);
procure.setBaseBidCode(newProjId + "-" + procure.getBaseBidCode().split("-")[1]);
procureService.updateById(procure);
}
return "运行成功 重新生成" + baseProjIds.size() + "个项目编号";
}

public String removeProject(List<String> projectCodes) {


+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovBizProjectBaseinfoDTO.java Vedi File

@@ -91,6 +91,9 @@ public class GovBizProjectBaseinfoDTO implements Serializable {
@ApiModelProperty("数据来源")
private String areaCode;

@ApiModelProperty("系统定位")
private String systemPosition;

@ApiModelProperty("生产时间")
private LocalDateTime bizTime;



+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectBaseinfoDTO.java Vedi File

@@ -93,6 +93,9 @@ public class GovOperationProjectBaseinfoDTO implements Serializable {
@ApiModelProperty("数据来源")
private String areaCode;

@ApiModelProperty("系统定位")
private String systemPosition;

@ApiModelProperty("生产时间")
private LocalDateTime bizTime;



+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovBizProjectBaseinfo.java Vedi File

@@ -111,6 +111,9 @@ public class GovBizProjectBaseinfo implements Serializable {
@ApiModelProperty("逻辑删除")
private Boolean deleted;

@ApiModelProperty("系统定位")
private String systemPosition;

@ApiModelProperty("最后修改时间")
private LocalDateTime updateOn;



+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovOperationProjectBaseinfo.java Vedi File

@@ -113,6 +113,9 @@ public class GovOperationProjectBaseinfo implements Serializable {
@ApiModelProperty("逻辑删除")
private Boolean deleted;

@ApiModelProperty("系统定位")
private String systemPosition;

@ApiModelProperty("最后修改时间")
private LocalDateTime updateOn;



+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovBizProjectBaseinfoVO.java Vedi File

@@ -93,6 +93,9 @@ public class GovBizProjectBaseinfoVO implements Serializable {
@ApiModelProperty("数据来源")
private String areaCode;

@ApiModelProperty("系统定位")
private String systemPosition;

@ApiModelProperty("生产时间")
private LocalDateTime bizTime;



+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectBaseinfoVO.java Vedi File

@@ -96,6 +96,9 @@ public class GovOperationProjectBaseinfoVO implements Serializable {
@ApiModelProperty("数据来源")
private String areaCode;

@ApiModelProperty("系统定位")
private String systemPosition;

@ApiModelProperty("生产时间")
private LocalDateTime bizTime;



+ 34
- 0
pmapi/src/main/java/com/ningdatech/pmapi/gov/utils/ProjectConvertUtil.java Vedi File

@@ -0,0 +1,34 @@
package com.ningdatech.pmapi.gov.utils;

import com.ningdatech.pmapi.gov.model.vo.GovBizProjectDetailVO;
import com.ningdatech.pmapi.projectlib.model.entity.Project;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.Objects;

/**
* @Classname ProjectCollectionUtil
* @Description
* @Date 2023/9/14 9:07
* @Author PoffyZhang
*/
public class ProjectConvertUtil {

/**
* 申报项目 转为 项目归集
* @param project
* @return
*/
public static GovBizProjectDetailVO declaredToCollection(Project project){
GovBizProjectDetailVO projectCollection = new GovBizProjectDetailVO();
if(Objects.isNull(project)){
return projectCollection;
}
String projectCode = project.getProjectCode();
String projectName = project.getProjectName();
projectCollection.setBaseProjId(projectCode);
return projectCollection;
}

}

+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/model/entity/ProjectDraft.java Vedi File

@@ -358,4 +358,7 @@ public class ProjectDraft implements Serializable {

@ApiModelProperty("是否推送省里")
private Boolean push;

@ApiModelProperty("系统定位")
private String systemPosition;
}

+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/model/vo/ProjectDraftVO.java Vedi File

@@ -361,4 +361,7 @@ public class ProjectDraftVO implements Serializable {

@ApiModelProperty("是否推送省里")
private Boolean push;

@ApiModelProperty("系统定位")
private String systemPosition;
}

+ 61
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectLibManage.java Vedi File

@@ -297,9 +297,8 @@ public class ProjectLibManage {
}
UserFullInfoDTO finalUser = user;

Set<String> projectCodes = page.getRecords().stream()
.map(Project::getProjectCode).collect(Collectors.toSet());
Set<String> instCodes = page.getRecords().stream()
.filter(p -> StringUtils.isNotBlank(p.getInstCode()))
.map(Project::getInstCode).collect(Collectors.toSet());
List<Task> tasks = taskService.createTaskQuery()
.processInstanceIdIn(instCodes)
@@ -542,6 +541,66 @@ public class ProjectLibManage {
return PageVo.of(records, page.getTotal());
}

public PageVo<ProjectLibListItemVO> listWithPermissionWorkbentch(ProjectListReq req,
UserFullInfoDTO user) {
req = buildProjectLibPermission(req,user);
Page<ProjectPO> page = projectService.pagelibWithPermission(req.page(), req);
long total;
if (CollUtil.isEmpty(page.getRecords())) {
return PageVo.empty();
}
UserFullInfoDTO finalUser = user;

Set<String> instCodes = page.getRecords().stream()
.filter(p -> StringUtils.isNotBlank(p.getInstCode()))
.map(ProjectPO::getInstCode).collect(Collectors.toSet());
List<Task> tasks = taskService.createTaskQuery()
.processInstanceIdIn(instCodes)
.orderByTaskCreateTime()
.asc()
.list();
Map<String, List<Task>> map = Maps.newHashMap();
Map<String,UserFullInfoDTO> userMap = Maps.newHashMap();
if(CollUtil.isNotEmpty(tasks)){
map = tasks.stream()
.collect(Collectors.groupingBy(Task::getProcessInstanceId));
userMap = searchUser(tasks,userInfoHelper);
}

List<ProjectLibListItemVO> records = Lists.newArrayList();
for(ProjectPO w : page.getRecords()){
ProjectLibListItemVO item = new ProjectLibListItemVO();
item.setId(w.getId());
item.setProjectName(w.getProjectName());
item.setProjectCode(w.getProjectCode());
item.setArea(w.getArea());
item.setAreaCode(w.getAreaCode());
item.setCreateOn(w.getCreateOn());
item.setDeclaredAmount(w.getDeclareAmount());
item.setStage(w.getStage());
item.setStatus(w.getStatus());
item.setProjectType(w.getProjectType());
item.setProjectYear(w.getProjectYear());
item.setBuildOrg(w.getBuildOrgName());
item.setBizDomain(w.getBizDomain());
item.setProcessStatus(w.getProcessStatus());
item.setInstCode(w.getInstCode());
item.setIsHigherSuperOrg(w.getIsHigherSuperOrg());
item.setApproveUsers(buildApproveUsers(w.getInstCode(),map,userMap));
if (finalUser.getIsOrgAdmin() &&
ProjectStatusEnum.PENDING_PREQUALIFICATION.getCode().equals(item.getStatus())
&& StringUtils.isNotBlank(w.getSuperOrgCode()) && StringUtils.isNotBlank(finalUser.getEmpPosUnitCode())
&& w.getSuperOrgCode().equals(finalUser.getEmpPosUnitCode())) {
item.setCanPreDeclared(Boolean.TRUE);
}
item.setApprovedAmount(w.getApprovalAmount());
item.setAnnualPlanAmount(w.getAnnualPlanAmount());
item.setPrePlanProjectId(w.getPrePlanProjectId());
records.add(item);
}
return PageVo.of(records, page.getTotal());
}

public static BigDecimal computeAmount(BigDecimal cuurentAmount,List<ProjectRenewalFundDeclaration> prfs) {
BigDecimal res = Objects.isNull(cuurentAmount) ? BigDecimal.ZERO : cuurentAmount;
for(ProjectRenewalFundDeclaration prf : prfs){


+ 1
- 1
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/manage/ProjectRenewalFundManage.java Vedi File

@@ -381,7 +381,7 @@ public class ProjectRenewalFundManage {
}

//判断金额
checkPaymentAmount(projectCode,projectYear,dto.getAnnualPaymentAmount());
// checkPaymentAmount(projectCode,projectYear,dto.getAnnualPaymentAmount());

declaration.setApprovalStatus(ProjectRenewalApprovalStatusEnum.PENDING.name());
if(Objects.nonNull(project)){


+ 3
- 0
pmapi/src/main/java/com/ningdatech/pmapi/projectlib/model/dto/ProjectDTO.java Vedi File

@@ -370,4 +370,7 @@ public class ProjectDTO implements Serializable {

@ApiModelProperty("是否推送省里")
private Boolean push;

@ApiModelProperty("系统定位")
private String systemPosition;
}

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

@@ -567,4 +567,7 @@ public class Project implements Serializable {

@ApiModelProperty("是否推送省里")
private Boolean push;

@ApiModelProperty("系统定位")
private String systemPosition;
}

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

@@ -549,4 +549,7 @@ public class ProjectDetailVO {

@ApiModelProperty("是否推送省里")
private Boolean push;

@ApiModelProperty("系统定位")
private String systemPosition;
}

+ 2
- 1
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/listener/EarlyWarningListener.java Vedi File

@@ -58,6 +58,7 @@ public class EarlyWarningListener {
String noticeMethod = event.getNoticeMethod();
String noticeContent = event.getNoticeContent();
Integer noticeType = event.getNoticeType();
Integer overTimeout = event.getOverTimeout();

//1.根据nodeId 查询到 node 去查找 未完成 项目实例关系表 找到实例
List<HistoricActivityInstance> hais = historyService.createHistoricActivityInstanceQuery()
@@ -122,7 +123,7 @@ public class EarlyWarningListener {
String taskId = hai.getTaskId();
String path = "toDoCenter/handleDuringExamine?instanceId=" +
instanceId + "&projectId=" + projectId + "&nodeId=" + nodeId + "&taskId=" + taskId;
earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,timeout,pi.getInstType(),
earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,timeout,overTimeout, pi.getInstType(),
hai.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime()
,employeeCode,project,WarningRuleTypeEnum.PROCESS_WARNING.getCode(),noticeType,
path,batchEmployees,nodeId);


+ 82
- 12
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/CockpitStatsStatisticsTask.java Vedi File

@@ -21,6 +21,9 @@ import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService;
import com.ningdatech.pmapi.gov.enumeration.GovProjectStatusEnum;
import com.ningdatech.pmapi.gov.model.entity.*;
import com.ningdatech.pmapi.gov.service.*;
import com.ningdatech.pmapi.meta.model.entity.ExpertTag;
import com.ningdatech.pmapi.meta.service.IExpertTagService;
import com.ningdatech.pmapi.meta.service.IMetaTagService;
import com.ningdatech.pmapi.performance.model.entity.PerformanceAppraisalProject;
import com.ningdatech.pmapi.performance.service.IPerformanceAppraisalProjectService;
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum;
@@ -102,13 +105,14 @@ public class CockpitStatsStatisticsTask {
private IGovBizProjectCimplementService cimplementService;

@Autowired
private IGovOperationProjectBaseinfoService operationBaseInfoService;

@Autowired
private IEarlyWarningRecordsService earlyWarningRecordsService;

private List<Integer> years = Lists.newArrayList(2021,2022,2023,2024,2025);

private final IMetaTagService metaTagService;

private final IExpertTagService expertTagService;

/**
* 定义统计 驾驶舱数据 每天3点开始执行一次
*
@@ -363,18 +367,84 @@ public class CockpitStatsStatisticsTask {
}

//2.专家统计
List<String> lsRegionCodes = RegionConst.LS_ARR;
List<ExpertUserFullInfo> experts = expertUserFullInfoService.list(Wrappers.lambdaQuery(ExpertUserFullInfo.class)
.eq(StringUtils.isNotBlank(regionCode) && !DashboardConstant.CockpitStats.TOTAL.equals(regionCode),
ExpertUserFullInfo::getRegionCode, regionCode));
ExpertUserFullInfo::getRegionCode, regionCode)
.in(StringUtils.isBlank(regionCode) || DashboardConstant.CockpitStats.TOTAL.equals(regionCode),
ExpertUserFullInfo::getRegionCode,lsRegionCodes)
.eq(ExpertUserFullInfo::getExpertAccountStatus,"available"));

List<ExpertTag> goodAt = expertTagService.list(Wrappers.lambdaQuery(ExpertTag.class));
Map<Long, List<ExpertTag>> tagMap = goodAt.stream()
.collect(Collectors.groupingBy(ExpertTag::getUserId));

String networkCode = "1030000";
String xinchuangCode = "2040000";
String fanganCode = "2030000";
String jishuCode = "2010000";
String dangzhengCode = "1020000";
String ruanyingCode = "2020000";
String caiwuCode = "5600000";
List<String> specialTags = Lists.newArrayList(networkCode,xinchuangCode,fanganCode,jishuCode,
dangzhengCode,ruanyingCode,caiwuCode);

cockpitStats.setExpertTotalNum(experts.size());
cockpitStats.setExpertFinancialNum(0);
cockpitStats.setExpertNetworkSecurityNum(0);
cockpitStats.setExpertXinchuangNum(0);
cockpitStats.setExpertPlanRationalityNum(0);
cockpitStats.setExpertPromotionInfoTechnologyNum(0);
cockpitStats.setExpertPartyGovInfoNum(0);
cockpitStats.setExpertSoftHardPricingNum(0);
cockpitStats.setExpertTechnicalFeasibilityAssessmentNum(0);
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<ExpertTag> 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 计划项目数(申报项目:完成年度计划的项目总数


+ 58
- 9
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java Vedi File

@@ -32,14 +32,12 @@ import com.wflow.service.IEarlyWarningService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.checkerframework.checker.nullness.qual.Nullable;
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.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -231,9 +229,11 @@ public class EarlyWarningInstanceNotStartTask {
List<Integer> noticeTypes = noticeMap.get(needToWaringProject.getProjectCode());
for(Integer noticeType : noticeTypes) {
for (String employeeCode : batchEmployees) {
earlyWarningManage.doEarlyWarning(noticeMethod, Objects.nonNull(noticeType) && noticeType.equals(1) ? noticeContent : adventContent, time, biz,
earlyWarningManage.doEarlyWarning(noticeMethod, Objects.nonNull(noticeType) && noticeType.equals(1) ? noticeContent : adventContent,
adventTime,time, biz,
needToWaringProject.getUpdateOn(),employeeCode, needToWaringProject,
WarningRuleTypeEnum.DECLARED_WARNING.getCode(), noticeType, path, batchEmployeesStr,null);
WarningRuleTypeEnum.DECLARED_WARNING.getCode(), noticeType, path, batchEmployeesStr,
null);
}
}
}
@@ -287,6 +287,7 @@ public class EarlyWarningInstanceNotStartTask {
Integer time = rJson.getInteger("time");
Integer adventTime = rJson.getInteger("adventTime");
Integer biz = rJson.getInteger("biz");
String notice = rJson.getString("notice");
if((Objects.isNull(time) && Objects.isNull(adventTime)) || Objects.isNull(biz)){
log.info("规则数据 错误 :{}",rJson);
return;
@@ -379,13 +380,60 @@ public class EarlyWarningInstanceNotStartTask {

for(Project needToWaringProject : needToWaringProjects){
//去预警通知
String employeeCode = needToWaringProject.getSponsor();
List<String> batchEmployees = Lists.newArrayList();

if(StringUtils.isBlank(notice)){
String sponsor = needToWaringProject.getSponsor();
batchEmployees.add(sponsor);
}else{
//去预警通知人 1.项目联系人 2.项目负责人 如果都包含 都要发

if(notice.contains(WarningNoticeTypeEnum.CONTACT.getCode().toString())){
String employeeCode = null;
String username = needToWaringProject.getContactName();
String mobile = needToWaringProject.getContactPhone();
if(StringUtils.isNotBlank(username) && StringUtils.isNotBlank(mobile)){
UserInfo user = userInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
.eq(UserInfo::getUsername, username)
.eq(UserInfo::getMobile, mobile)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(user)){
employeeCode = user.getEmployeeCode();
}
if(Objects.nonNull(employeeCode)){
batchEmployees.add(employeeCode);
}
}
}
if(notice.contains(WarningNoticeTypeEnum.RESPONSIBLE.getCode().toString())){
String employeeCode = null;
String username = needToWaringProject.getResponsibleMan();
String mobile = needToWaringProject.getResponsibleManMobile();
if(StringUtils.isNotBlank(username) && StringUtils.isNotBlank(mobile)){
UserInfo user = userInfoService.getOne(Wrappers.lambdaQuery(UserInfo.class)
.eq(UserInfo::getUsername, username)
.eq(UserInfo::getMobile, mobile)
.last(BizConst.LIMIT_1));
if(Objects.nonNull(user)){
employeeCode = user.getEmployeeCode();
}
if(Objects.nonNull(employeeCode)){
batchEmployees.add(employeeCode);
}
}
}
}

if(noticeMap.containsKey(needToWaringProject.getProjectCode())){
List<Integer> noticeTypes = noticeMap.get(needToWaringProject.getProjectCode());
for(Integer noticeType : noticeTypes){
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&&noticeType.equals(1) ? noticeContent : adventContent,time,biz,
needToWaringProject.getUpdateOn(),employeeCode,needToWaringProject,
WarningRuleTypeEnum.OPERATION_WARNING.getCode(),noticeType,path,employeeCode,null);
for (String employeeCode : batchEmployees) {
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&&noticeType.equals(1) ? noticeContent : adventContent,
adventTime,time,biz,
needToWaringProject.getUpdateOn(),employeeCode,needToWaringProject,
WarningRuleTypeEnum.OPERATION_WARNING.getCode(),noticeType,path,
batchEmployees.stream().collect(Collectors.joining(StrPool.COMMA)),null);
}
}
}

@@ -498,7 +546,8 @@ public class EarlyWarningInstanceNotStartTask {
if(noticeTypeMap.containsKey(needToWaringProject.getProjectCode())){
List<Integer> noticeTypes = noticeTypeMap.get(needToWaringProject.getProjectCode());
for(Integer noticeType : noticeTypes){
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&&noticeType.equals(1) ? noticeContent : adventContent,time,null,
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&&noticeType.equals(1) ? noticeContent : adventContent,
adventTime,time,null,
needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project,
WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr,needToWaringProject.getId().toString());
}


+ 33
- 12
pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningProjectTask.java Vedi File

@@ -3,6 +3,7 @@ package com.ningdatech.pmapi.scheduler.task;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.StopWatch;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.google.common.collect.Sets;
import com.ningdatech.pmapi.common.constant.BizConst;
import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum;
import com.ningdatech.pmapi.projectlib.enumeration.WarningFlowTypeEnum;
@@ -29,7 +30,9 @@ import java.net.InetAddress;
import java.net.UnknownHostException;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.stream.Collectors;

/**
@@ -74,6 +77,10 @@ public class EarlyWarningProjectTask {
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds());
return;
}

Set<String> projectSet = Sets.newHashSet();
Map<String, Project> projectMap = projects.stream().filter(p -> projectSet.add(p.getProjectCode()))
.collect(Collectors.toMap(Project::getProjectCode, p -> p));
List<ProjectEarlyWarning> warnings = projectEarlyWarningService.list();
List<String> warningProjectCodes = warnings.stream().map(ProjectEarlyWarning::getProjectCode)
.collect(Collectors.toList());
@@ -105,7 +112,17 @@ public class EarlyWarningProjectTask {
projectEarlyWarningService.saveBatch(toAdd);
}

//2.去查询 各个报警 是否已经正常
//2.删除 已经不存在的项目
List<ProjectEarlyWarning> toRemove = warnings.stream()
.filter(w -> !projectMap.containsKey(w.getProjectCode()))
.collect(Collectors.toList());
if(CollUtil.isNotEmpty(toRemove)){
List<Long> removeIds = toRemove.stream().map(ProjectEarlyWarning::getId)
.collect(Collectors.toList());
projectEarlyWarningService.removeBatchByIds(removeIds);
}

//3.去查询 各个报警 是否已经正常
List<ProjectEarlyWarning> trueWarnings = warnings.stream().filter(w -> Objects.nonNull(w.getNormal()) && !w.getNormal()).collect(Collectors.toList());
if(CollUtil.isEmpty(trueWarnings)){
log.info("没有异常的项目 要去查询");
@@ -113,36 +130,40 @@ public class EarlyWarningProjectTask {
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds());
return;
}
//2.1 预警预警 如果正常了 要改会正常
checkNormal(trueWarnings);

stopWatch.stop();
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds());
}

//3.去查询 各个报警 是否已经正常
private void checkNormal(List<ProjectEarlyWarning> trueWarnings) {
//3.1 预警预警 如果正常了 要改会正常
List<ProjectEarlyWarning> processWarning = trueWarnings.stream().filter(w -> Objects.nonNull(w.getProcessWarning())
&& w.getProcessWarning())
.collect(Collectors.toList());
checkProcessWarning(processWarning);

//2.2 填报预警 如果正常了 要改会正常
//3.2 填报预警 如果正常了 要改会正常
List<ProjectEarlyWarning> declaredWarning = trueWarnings.stream().filter(w ->
Objects.nonNull(w.getDeclaredWarning())
&& w.getDeclaredWarning())
&& w.getDeclaredWarning())
.collect(Collectors.toList());
checkDeclaredWarning(declaredWarning);

//2.3 实施预警 如果正常了 要改会正常
//3.3 实施预警 如果正常了 要改会正常
List<ProjectEarlyWarning> operationWarning = trueWarnings.stream().filter(w ->
Objects.nonNull(w.getOperationWarning())
&& w.getOperationWarning())
&& w.getOperationWarning())
.collect(Collectors.toList());
checkOperationWarning(operationWarning);

//2.4 续建资金预警 如果正常了 要改会正常
//3.4 续建资金预警 如果正常了 要改回正常
List<ProjectEarlyWarning> renewalFundWarning = trueWarnings.stream().filter(w ->
Objects.nonNull(w.getRenewalFundWarning())
&& w.getRenewalFundWarning())
&& w.getRenewalFundWarning())
.collect(Collectors.toList());
checkRenewalFundWarning(renewalFundWarning);


stopWatch.stop();
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds());
}

private void checkRenewalFundWarning(List<ProjectEarlyWarning> renewalFundWarnings) {


+ 79
- 10
pmapi/src/main/java/com/ningdatech/pmapi/sys/manage/EarlyWarningManage.java Vedi File

@@ -16,6 +16,7 @@ import com.ningdatech.pmapi.sys.service.INotifyService;
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo;
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO;
import com.ningdatech.yxt.model.cmd.SendSmsCmd;
import com.wflow.enums.WarningNoticeTypeEnum;
import com.wflow.enums.WarningRuleTypeEnum;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -51,12 +52,12 @@ public class EarlyWarningManage {
* 预警通知
* @param noticeMethod
* @param noticeContent
* @param timeout
* @param adventTimeout
* @param employeeCode
* @param project
*/
public void doEarlyWarning(String noticeMethod,String noticeContent, Integer timeout,Integer biz,
LocalDateTime startTime,String employeeCode,
public void doEarlyWarning(String noticeMethod,String noticeContent, Integer adventTimeout,Integer overTimeout,
Integer biz, LocalDateTime startTime,String employeeCode,
Project project,Integer ruleType,Integer noticeType,
String path,String batchEmployees,String nodeId) {
//1.存入 预警记录
@@ -66,22 +67,53 @@ public class EarlyWarningManage {

switch (WarningRuleTypeEnum.checkByCode(ruleType)){
case PROCESS_WARNING:
content = convertContent(noticeContent,project.getProjectName(),
InstTypeEnum.getByCode(biz),timeout);
if(Objects.isNull(noticeType)){
content = convertContent(noticeContent,project.getProjectName(),
InstTypeEnum.getByCode(biz),overTimeout);
}else if(noticeType.equals(WarningNoticeTypeEnum.ADVENT.getCode())) {
content = convertAdventContent(noticeContent,project.getProjectName(),
InstTypeEnum.getByCode(biz),adventTimeout,overTimeout);
}else{
content = convertContent(noticeContent,project.getProjectName(),
InstTypeEnum.getByCode(biz),overTimeout);
}
records.setRuleType(WarningRuleTypeEnum.PROCESS_WARNING.getCode());
break;
case DECLARED_WARNING:
content = convertContent(noticeContent,project.getProjectName(),
WarningFlowTypeEnum.getByCode(biz),timeout);
if(Objects.isNull(noticeType)){
content = convertContent(noticeContent,project.getProjectName(),
WarningFlowTypeEnum.getByCode(biz),overTimeout);
}else if(noticeType.equals(WarningNoticeTypeEnum.ADVENT.getCode())) {
content = convertAdventContent(noticeContent,project.getProjectName(),
WarningFlowTypeEnum.getByCode(biz),adventTimeout,overTimeout);
}else{
content = convertContent(noticeContent,project.getProjectName(),
WarningFlowTypeEnum.getByCode(biz),overTimeout);
}
records.setRuleType(WarningRuleTypeEnum.DECLARED_WARNING.getCode());
break;
case OPERATION_WARNING:
content = convertContent(noticeContent,project.getProjectName(),
WarningOperationTypeEnum.getByCode(biz),timeout);
if(Objects.isNull(noticeType)){
content = convertContent(noticeContent,project.getProjectName(),
WarningOperationTypeEnum.getByCode(biz),overTimeout);
}else if(noticeType.equals(WarningNoticeTypeEnum.ADVENT.getCode())) {
content = convertAdventContent(noticeContent,project.getProjectName(),
WarningOperationTypeEnum.getByCode(biz),adventTimeout,overTimeout);
}else{
content = convertContent(noticeContent,project.getProjectName(),
WarningOperationTypeEnum.getByCode(biz),overTimeout);
}
records.setRuleType(WarningRuleTypeEnum.OPERATION_WARNING.getCode());
break;
case RENEWAL_FUND:
content = convertContent(noticeContent,project.getProjectName(),timeout);
if(Objects.isNull(noticeType)){
content = convertContent(noticeContent,project.getProjectName(),overTimeout);
}else if(noticeType.equals(WarningNoticeTypeEnum.ADVENT.getCode())) {
content = convertAdventContent(noticeContent,project.getProjectName(),adventTimeout,overTimeout);
}else{
content = convertContent(noticeContent,project.getProjectName(),overTimeout);
}

records.setRuleType(WarningRuleTypeEnum.RENEWAL_FUND.getCode());
break;
default:
@@ -147,6 +179,13 @@ public class EarlyWarningManage {
log.info("通知内容 :{}",noticeContent);
return noticeContent;
}
private String convertAdventContent(String noticeContent, String projectName, Integer timeout,Integer overTimeOut) {
noticeContent = noticeContent.replace("{projectName}",projectName)
.replace("{time}",String.valueOf(timeout))
.replace("{time2}",String.valueOf((overTimeOut - timeout)));
log.info("通知内容 :{}",noticeContent);
return noticeContent;
}

/**
* 转换出 通知的内容
@@ -165,6 +204,16 @@ public class EarlyWarningManage {
return noticeContent;
}

private String convertAdventContent(String noticeContent, String projectName, InstTypeEnum instTypeEnum, Integer timeout,Integer overTimeOut) {
noticeContent = noticeContent.replace("{projectName}",projectName)
.replace("{flowType}",Objects.nonNull(instTypeEnum) ? instTypeEnum.getDesc() : "{flowType}")
.replace("{stepName}",Objects.nonNull(instTypeEnum) ? instTypeEnum.getDesc() : "{stepName}")
.replace("{time}",String.valueOf(timeout))
.replace("{time2}",String.valueOf((overTimeOut - timeout)));
log.info("通知内容 :{}",noticeContent);
return noticeContent;
}

private String convertContent(String noticeContent, String projectName, WarningFlowTypeEnum warningFlowTypeEnum, Integer timeout) {
noticeContent = noticeContent.replace("{projectName}",projectName)
.replace("{flowType}",Objects.nonNull(warningFlowTypeEnum) ? warningFlowTypeEnum.getDesc() : "{flowType}")
@@ -174,6 +223,16 @@ public class EarlyWarningManage {
return noticeContent;
}

private String convertAdventContent(String noticeContent, String projectName, WarningFlowTypeEnum warningFlowTypeEnum, Integer timeout,Integer overTimeout) {
noticeContent = noticeContent.replace("{projectName}",projectName)
.replace("{flowType}",Objects.nonNull(warningFlowTypeEnum) ? warningFlowTypeEnum.getDesc() : "{flowType}")
.replace("{stepName}",Objects.nonNull(warningFlowTypeEnum) ? warningFlowTypeEnum.getDesc() : "{stepName}")
.replace("{time}",String.valueOf(timeout))
.replace("{time2}",String.valueOf((overTimeout - timeout)));
log.info("通知内容 :{}",noticeContent);
return noticeContent;
}

private String convertContent(String noticeContent, String projectName, WarningOperationTypeEnum operationTypeEnum, Integer timeout) {
noticeContent = noticeContent.replace("{projectName}",projectName)
.replace("{flowType}",Objects.nonNull(operationTypeEnum) ? operationTypeEnum.getDesc() : "{flowType}")
@@ -182,4 +241,14 @@ public class EarlyWarningManage {
log.info("通知内容 :{}",noticeContent);
return noticeContent;
}

private String convertAdventContent(String noticeContent, String projectName, WarningOperationTypeEnum operationTypeEnum, Integer timeout,Integer overTimeout) {
noticeContent = noticeContent.replace("{projectName}",projectName)
.replace("{flowType}",Objects.nonNull(operationTypeEnum) ? operationTypeEnum.getDesc() : "{flowType}")
.replace("{stepName}",Objects.nonNull(operationTypeEnum) ? operationTypeEnum.getDesc() : "{stepName}")
.replace("{time}",String.valueOf(timeout))
.replace("{time2}",String.valueOf((overTimeout - timeout)));
log.info("通知内容 :{}",noticeContent);
return noticeContent;
}
}

+ 4
- 4
pmapi/src/main/java/com/ningdatech/pmapi/workbench/manage/WorkbenchManage.java Vedi File

@@ -115,10 +115,9 @@ public class WorkbenchManage {
//这个不能放入子线程
ProjectListReq projectListReq = new ProjectListReq();
projectListReq.setPageNumber(1);
projectListReq.setPageSize(5);
projectListReq.setPageSize(2000);
projectListReq.setProjectYear(year);
projectListReq.setBuildOrgCode(user.getEmpPosUnitCode());
res.setProjects(new ArrayList<>(projectLibManage.projectLibListApprove(projectListReq, user).getRecords()));
res.setProjects(new ArrayList<>(projectLibManage.listWithPermissionWorkbentch(projectListReq,user).getRecords()));
return res;
}

@@ -294,7 +293,8 @@ public class WorkbenchManage {
Long between = ChronoUnit.HOURS.between(instStart,LocalDateTime.now());
Integer times = 0;
for(String employee : employees){
earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue(),biz,
earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue()
,between.intValue(),biz,
instStart,employee,project,
ruleType,noticeType,path,batchEmployees,record.getNodeId());
times++;


Loading…
Annulla
Salva