@@ -1,5 +1,9 @@ | |||||
package com.ningdatech.pmapi.common.constant; | package com.ningdatech.pmapi.common.constant; | ||||
import com.google.common.collect.Lists; | |||||
import java.util.List; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* RegionConst | * RegionConst | ||||
@@ -44,6 +48,24 @@ public interface RegionConst { | |||||
String RC_ZJ = "330000"; | String RC_ZJ = "330000"; | ||||
String NINE_CODE_LAST = "000"; | 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)--------------------------------------------------------- | //----------------------------------------地区父级ID(缩写PID)--------------------------------------------------------- | ||||
@@ -396,6 +396,7 @@ public class DashboardProjectManage { | |||||
} | } | ||||
projectInfo.setProjectIntroduction(apply.getBaseProjIntro()); | projectInfo.setProjectIntroduction(apply.getBaseProjIntro()); | ||||
projectInfo.setBuildCycle(apply.getBaseProjDuration()); | projectInfo.setBuildCycle(apply.getBaseProjDuration()); | ||||
projectInfo.setApprovalAmount(apply.getBaseProjTotalAmount()); | |||||
} | } | ||||
projectInfo.setProjectCode(projectCode); | projectInfo.setProjectCode(projectCode); | ||||
projectInfo.setProjectName(baseInfo.getBaseProjName()); | projectInfo.setProjectName(baseInfo.getBaseProjName()); | ||||
@@ -416,6 +417,7 @@ public class DashboardProjectManage { | |||||
} | } | ||||
projectInfo.setProjectIntroduction(apply.getBaseProjIntro()); | projectInfo.setProjectIntroduction(apply.getBaseProjIntro()); | ||||
projectInfo.setBuildCycle(apply.getBaseProjDuration()); | projectInfo.setBuildCycle(apply.getBaseProjDuration()); | ||||
projectInfo.setApprovalAmount(apply.getBaseProjTotalAmount()); | |||||
} | } | ||||
projectInfo.setProjectCode(projectCode); | projectInfo.setProjectCode(projectCode); | ||||
projectInfo.setProjectName(operationBase.getBaseProjName()); | projectInfo.setProjectName(operationBase.getBaseProjName()); | ||||
@@ -101,27 +101,33 @@ public class CockpitStats implements Serializable { | |||||
@ApiModelProperty("专家-总人数") | @ApiModelProperty("专家-总人数") | ||||
private Integer expertTotalNum = 0; | private Integer expertTotalNum = 0; | ||||
@ApiModelProperty("专家-方案合理性") | @ApiModelProperty("专家-总人数-包含这些标签的专家总人数") | ||||
private Integer specialExpertNum = 0; | |||||
@ApiModelProperty("专家-方案合理性-擅长") | |||||
private Integer expertPlanRationalityNum = 0; | private Integer expertPlanRationalityNum = 0; | ||||
@ApiModelProperty("专家-计数可行性评估") | @ApiModelProperty("专家-计数可行性评估-擅长") | ||||
private Integer expertTechnicalFeasibilityAssessmentNum = 0; | private Integer expertTechnicalFeasibilityAssessmentNum = 0; | ||||
@ApiModelProperty("专家-信创") | @ApiModelProperty("专家-信创-擅长") | ||||
private Integer expertXinchuangNum = 0; | private Integer expertXinchuangNum = 0; | ||||
@ApiModelProperty("专家-软硬件核价") | @ApiModelProperty("专家-软硬件核价-擅长") | ||||
private Integer expertSoftHardPricingNum = 0; | private Integer expertSoftHardPricingNum = 0; | ||||
@ApiModelProperty("专家-党政信息") | @ApiModelProperty("专家-党政信息-擅长") | ||||
private Integer expertPartyGovInfoNum = 0; | private Integer expertPartyGovInfoNum = 0; | ||||
@ApiModelProperty("专家-网络安全") | @ApiModelProperty("专家-网络安全-擅长") | ||||
private Integer expertNetworkSecurityNum = 0; | private Integer expertNetworkSecurityNum = 0; | ||||
@ApiModelProperty("专家-信息化专家") | @ApiModelProperty("专家-信息化专家") | ||||
private Integer expertPromotionInfoTechnologyNum = 0; | private Integer expertPromotionInfoTechnologyNum = 0; | ||||
@ApiModelProperty("专家-信创专家") | |||||
private Integer expertXinchuangOtherNum = 0; | |||||
@ApiModelProperty("专家-财务专家") | @ApiModelProperty("专家-财务专家") | ||||
private Integer expertFinancialNum = 0; | private Integer expertFinancialNum = 0; | ||||
@@ -150,6 +150,9 @@ public class CockpitStatsVO implements Serializable { | |||||
@ApiModelProperty("专家-总人数") | @ApiModelProperty("专家-总人数") | ||||
private Integer expertTotalNum; | private Integer expertTotalNum; | ||||
@ApiModelProperty("专家-总人数-包含这些标签的专家总人数") | |||||
private Integer specialExpertNum; | |||||
@ApiModelProperty("专家-方案合理性 数量") | @ApiModelProperty("专家-方案合理性 数量") | ||||
private Integer expertPlanRationalityNum; | private Integer expertPlanRationalityNum; | ||||
@@ -173,6 +176,9 @@ public class CockpitStatsVO implements Serializable { | |||||
@ApiModelProperty("专家-财务专家 数量") | @ApiModelProperty("专家-财务专家 数量") | ||||
private Integer expertFinancialNum; | private Integer expertFinancialNum; | ||||
@ApiModelProperty("专家-信创专家 数量") | |||||
private Integer expertXinchuangOtherNum; | |||||
} | } | ||||
@Data | @Data | ||||
@@ -54,5 +54,8 @@ public class ProtraitProjectInfoVO { | |||||
@ApiModelProperty("项目状态情况") | @ApiModelProperty("项目状态情况") | ||||
private List<ProtraitProjectStatusSituationVO> statusSituation; | private List<ProtraitProjectStatusSituationVO> statusSituation; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
} | } | ||||
@@ -15,6 +15,7 @@ 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.StrPool; | 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.BizConst; | ||||
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; | ||||
@@ -58,6 +59,7 @@ import io.swagger.annotations.ApiModelProperty; | |||||
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.apache.poi.util.IOUtils; | |||||
import org.flowable.engine.HistoryService; | import org.flowable.engine.HistoryService; | ||||
import org.flowable.engine.RuntimeService; | import org.flowable.engine.RuntimeService; | ||||
import org.springframework.beans.factory.annotation.Autowired; | 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.stereotype.Component; | ||||
import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||
import org.springframework.web.client.RestTemplate; | import org.springframework.web.client.RestTemplate; | ||||
import java.io.BufferedOutputStream; | import java.io.*; | ||||
import java.io.File; | |||||
import java.io.FileOutputStream; | |||||
import java.io.IOException; | |||||
import java.lang.reflect.Field; | import java.lang.reflect.Field; | ||||
import java.time.LocalDate; | import java.time.LocalDate; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
@@ -121,6 +121,8 @@ public class GovProjectCollectionManage { | |||||
private final ThreadPoolTaskScheduler threadPoolTaskScheduler; | private final ThreadPoolTaskScheduler threadPoolTaskScheduler; | ||||
private final FileService fileService; | |||||
@Value("${project.push-url}") | @Value("${project.push-url}") | ||||
private String pushUrl; | private String pushUrl; | ||||
@@ -1695,7 +1697,9 @@ public class GovProjectCollectionManage { | |||||
StringJoiner sj = convertAndUpload(procure.getBiddingFile()); | StringJoiner sj = convertAndUpload(procure.getBiddingFile()); | ||||
saveProcure.setBiddingFilePdf(sj.toString()); | 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()); | StringJoiner sj = convertAndUpload(procure.getPurchaseContract()); | ||||
saveProcure.setPurchaseContractPdf(sj.toString()); | saveProcure.setPurchaseContractPdf(sj.toString()); | ||||
} | } | ||||
@@ -1710,9 +1714,25 @@ public class GovProjectCollectionManage { | |||||
JSONArray fileArray = JSON.parseArray(bpb); | JSONArray fileArray = JSON.parseArray(bpb); | ||||
fileArray.forEach(j -> { | fileArray.forEach(j -> { | ||||
JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(j)); | JSONObject jsonObject = JSON.parseObject(JSON.toJSONString(j)); | ||||
byte[] btyes = wpsConvertManage.downloadToPdfStream(jsonObject.getLong("id")); | |||||
String suffix = jsonObject.getString("suffix"); | String suffix = jsonObject.getString("suffix"); | ||||
//如果已经是PDF 就不用转换了 | |||||
byte[] btyes = null; | |||||
String originalFileName = jsonObject.getString("originalFileName"); | 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)){ | if(!BizConst.DEV.equals(active)){ | ||||
originalFileName = originalFileName.replace(StrPool.DOT + suffix, ".pdf"); | originalFileName = originalFileName.replace(StrPool.DOT + suffix, ".pdf"); | ||||
} | } | ||||
@@ -1787,69 +1807,156 @@ public class GovProjectCollectionManage { | |||||
if(CollUtil.isEmpty(baseProjIds)){ | if(CollUtil.isEmpty(baseProjIds)){ | ||||
throw new BizException("项目编号不能为空"); | throw new BizException("项目编号不能为空"); | ||||
} | } | ||||
Integer successNum = 0; | |||||
for(String baseProjId : baseProjIds){ | for(String baseProjId : baseProjIds){ | ||||
//两种情况 | |||||
//1.项目归集 | |||||
GovBizProjectBaseinfo baseinfo = baseinfoService.getOne(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class) | GovBizProjectBaseinfo baseinfo = baseinfoService.getOne(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class) | ||||
.eq(GovBizProjectBaseinfo::getBaseProjId, baseProjId) | .eq(GovBizProjectBaseinfo::getBaseProjId, baseProjId) | ||||
.orderByDesc(GovBizProjectBaseinfo::getTongTime) | .orderByDesc(GovBizProjectBaseinfo::getTongTime) | ||||
.last(BizConst.LIMIT_1)); | .last(BizConst.LIMIT_1)); | ||||
GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class) | if(Objects.nonNull(baseinfo)){ | ||||
.eq(GovBizProjectApply::getBaseProjId, baseProjId) | rebuildGuiji(baseProjId); | ||||
.orderByDesc(GovBizProjectApply::getTongTime) | successNum ++; | ||||
.last(BizConst.LIMIT_1)); | |||||
if(Objects.isNull(baseinfo)){ | |||||
System.out.println("项目不存在 直接下一个"); | |||||
continue; | |||||
} | } | ||||
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) | //2.运维备案 | ||||
.eq(GovBizProjectApprove::getBaseProjId, baseProjId) | GovOperationProjectBaseinfo operation = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) | ||||
.orderByDesc(GovBizProjectApprove::getTongTime) | .eq(GovOperationProjectBaseinfo::getBaseProjId, baseProjId) | ||||
.orderByDesc(GovOperationProjectBaseinfo::getTongTime) | |||||
.last(BizConst.LIMIT_1)); | .last(BizConst.LIMIT_1)); | ||||
if(Objects.nonNull(approve)){ | if(Objects.nonNull(operation)){ | ||||
approve.setBaseProjId(newProjId); | rebuildOperation(baseProjId); | ||||
approveService.updateById(approve); | 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) | GovBizProjectApprove approve = approveService.getOne(Wrappers.lambdaUpdate(GovBizProjectApprove.class) | ||||
.eq(GovBizProjectCimplement::getBaseProjId, baseProjId) | .eq(GovBizProjectApprove::getBaseProjId, baseProjId) | ||||
.orderByDesc(GovBizProjectCimplement::getTongTime) | .orderByDesc(GovBizProjectApprove::getTongTime) | ||||
.last(BizConst.LIMIT_1)); | .last(BizConst.LIMIT_1)); | ||||
if(Objects.nonNull(cimplement)){ | if(Objects.nonNull(approve)){ | ||||
cimplement.setBaseProjId(newProjId); | approve.setBaseProjId(newProjId); | ||||
cimplement.setBaseBidCode(newProjId); | approveService.updateById(approve); | ||||
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) | GovBizProjectCimplement cimplement = cimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectCimplement.class) | ||||
.eq(GovBizProjectProcure::getBaseProjId, baseProjId)); | .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){ | GovBizProjectMimplement mimplement = mimplementService.getOne(Wrappers.lambdaQuery(GovBizProjectMimplement.class) | ||||
procure.setBaseProjId(newProjId); | .eq(GovBizProjectMimplement::getBaseProjId, baseProjId) | ||||
procure.setBaseBidCode(newProjId + "-" + procure.getBaseBidCode().split("-")[1]); | .orderByDesc(GovBizProjectMimplement::getTongTime) | ||||
procureService.updateById(procure); | .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) { | public String removeProject(List<String> projectCodes) { | ||||
@@ -91,6 +91,9 @@ public class GovBizProjectBaseinfoDTO implements Serializable { | |||||
@ApiModelProperty("数据来源") | @ApiModelProperty("数据来源") | ||||
private String areaCode; | private String areaCode; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
@ApiModelProperty("生产时间") | @ApiModelProperty("生产时间") | ||||
private LocalDateTime bizTime; | private LocalDateTime bizTime; | ||||
@@ -93,6 +93,9 @@ public class GovOperationProjectBaseinfoDTO implements Serializable { | |||||
@ApiModelProperty("数据来源") | @ApiModelProperty("数据来源") | ||||
private String areaCode; | private String areaCode; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
@ApiModelProperty("生产时间") | @ApiModelProperty("生产时间") | ||||
private LocalDateTime bizTime; | private LocalDateTime bizTime; | ||||
@@ -111,6 +111,9 @@ public class GovBizProjectBaseinfo implements Serializable { | |||||
@ApiModelProperty("逻辑删除") | @ApiModelProperty("逻辑删除") | ||||
private Boolean deleted; | private Boolean deleted; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
@ApiModelProperty("最后修改时间") | @ApiModelProperty("最后修改时间") | ||||
private LocalDateTime updateOn; | private LocalDateTime updateOn; | ||||
@@ -113,6 +113,9 @@ public class GovOperationProjectBaseinfo implements Serializable { | |||||
@ApiModelProperty("逻辑删除") | @ApiModelProperty("逻辑删除") | ||||
private Boolean deleted; | private Boolean deleted; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
@ApiModelProperty("最后修改时间") | @ApiModelProperty("最后修改时间") | ||||
private LocalDateTime updateOn; | private LocalDateTime updateOn; | ||||
@@ -93,6 +93,9 @@ public class GovBizProjectBaseinfoVO implements Serializable { | |||||
@ApiModelProperty("数据来源") | @ApiModelProperty("数据来源") | ||||
private String areaCode; | private String areaCode; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
@ApiModelProperty("生产时间") | @ApiModelProperty("生产时间") | ||||
private LocalDateTime bizTime; | private LocalDateTime bizTime; | ||||
@@ -96,6 +96,9 @@ public class GovOperationProjectBaseinfoVO implements Serializable { | |||||
@ApiModelProperty("数据来源") | @ApiModelProperty("数据来源") | ||||
private String areaCode; | private String areaCode; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
@ApiModelProperty("生产时间") | @ApiModelProperty("生产时间") | ||||
private LocalDateTime bizTime; | private LocalDateTime bizTime; | ||||
@@ -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; | |||||
} | |||||
} |
@@ -358,4 +358,7 @@ public class ProjectDraft implements Serializable { | |||||
@ApiModelProperty("是否推送省里") | @ApiModelProperty("是否推送省里") | ||||
private Boolean push; | private Boolean push; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
} | } |
@@ -361,4 +361,7 @@ public class ProjectDraftVO implements Serializable { | |||||
@ApiModelProperty("是否推送省里") | @ApiModelProperty("是否推送省里") | ||||
private Boolean push; | private Boolean push; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
} | } |
@@ -297,9 +297,8 @@ public class ProjectLibManage { | |||||
} | } | ||||
UserFullInfoDTO finalUser = user; | UserFullInfoDTO finalUser = user; | ||||
Set<String> projectCodes = page.getRecords().stream() | |||||
.map(Project::getProjectCode).collect(Collectors.toSet()); | |||||
Set<String> instCodes = page.getRecords().stream() | Set<String> instCodes = page.getRecords().stream() | ||||
.filter(p -> StringUtils.isNotBlank(p.getInstCode())) | |||||
.map(Project::getInstCode).collect(Collectors.toSet()); | .map(Project::getInstCode).collect(Collectors.toSet()); | ||||
List<Task> tasks = taskService.createTaskQuery() | List<Task> tasks = taskService.createTaskQuery() | ||||
.processInstanceIdIn(instCodes) | .processInstanceIdIn(instCodes) | ||||
@@ -542,6 +541,66 @@ public class ProjectLibManage { | |||||
return PageVo.of(records, page.getTotal()); | 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) { | public static BigDecimal computeAmount(BigDecimal cuurentAmount,List<ProjectRenewalFundDeclaration> prfs) { | ||||
BigDecimal res = Objects.isNull(cuurentAmount) ? BigDecimal.ZERO : cuurentAmount; | BigDecimal res = Objects.isNull(cuurentAmount) ? BigDecimal.ZERO : cuurentAmount; | ||||
for(ProjectRenewalFundDeclaration prf : prfs){ | for(ProjectRenewalFundDeclaration prf : prfs){ | ||||
@@ -381,7 +381,7 @@ public class ProjectRenewalFundManage { | |||||
} | } | ||||
//判断金额 | //判断金额 | ||||
checkPaymentAmount(projectCode,projectYear,dto.getAnnualPaymentAmount()); | // checkPaymentAmount(projectCode,projectYear,dto.getAnnualPaymentAmount()); | ||||
declaration.setApprovalStatus(ProjectRenewalApprovalStatusEnum.PENDING.name()); | declaration.setApprovalStatus(ProjectRenewalApprovalStatusEnum.PENDING.name()); | ||||
if(Objects.nonNull(project)){ | if(Objects.nonNull(project)){ | ||||
@@ -370,4 +370,7 @@ public class ProjectDTO implements Serializable { | |||||
@ApiModelProperty("是否推送省里") | @ApiModelProperty("是否推送省里") | ||||
private Boolean push; | private Boolean push; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
} | } |
@@ -567,4 +567,7 @@ public class Project implements Serializable { | |||||
@ApiModelProperty("是否推送省里") | @ApiModelProperty("是否推送省里") | ||||
private Boolean push; | private Boolean push; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
} | } |
@@ -549,4 +549,7 @@ public class ProjectDetailVO { | |||||
@ApiModelProperty("是否推送省里") | @ApiModelProperty("是否推送省里") | ||||
private Boolean push; | private Boolean push; | ||||
@ApiModelProperty("系统定位") | |||||
private String systemPosition; | |||||
} | } |
@@ -58,6 +58,7 @@ public class EarlyWarningListener { | |||||
String noticeMethod = event.getNoticeMethod(); | String noticeMethod = event.getNoticeMethod(); | ||||
String noticeContent = event.getNoticeContent(); | String noticeContent = event.getNoticeContent(); | ||||
Integer noticeType = event.getNoticeType(); | Integer noticeType = event.getNoticeType(); | ||||
Integer overTimeout = event.getOverTimeout(); | |||||
//1.根据nodeId 查询到 node 去查找 未完成 项目实例关系表 找到实例 | //1.根据nodeId 查询到 node 去查找 未完成 项目实例关系表 找到实例 | ||||
List<HistoricActivityInstance> hais = historyService.createHistoricActivityInstanceQuery() | List<HistoricActivityInstance> hais = historyService.createHistoricActivityInstanceQuery() | ||||
@@ -122,7 +123,7 @@ public class EarlyWarningListener { | |||||
String taskId = hai.getTaskId(); | String taskId = hai.getTaskId(); | ||||
String path = "toDoCenter/handleDuringExamine?instanceId=" + | String path = "toDoCenter/handleDuringExamine?instanceId=" + | ||||
instanceId + "&projectId=" + projectId + "&nodeId=" + nodeId + "&taskId=" + taskId; | 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() | hai.getStartTime().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime() | ||||
,employeeCode,project,WarningRuleTypeEnum.PROCESS_WARNING.getCode(),noticeType, | ,employeeCode,project,WarningRuleTypeEnum.PROCESS_WARNING.getCode(),noticeType, | ||||
path,batchEmployees,nodeId); | path,batchEmployees,nodeId); | ||||
@@ -21,6 +21,9 @@ import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService; | |||||
import com.ningdatech.pmapi.gov.enumeration.GovProjectStatusEnum; | import com.ningdatech.pmapi.gov.enumeration.GovProjectStatusEnum; | ||||
import com.ningdatech.pmapi.gov.model.entity.*; | import com.ningdatech.pmapi.gov.model.entity.*; | ||||
import com.ningdatech.pmapi.gov.service.*; | 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.model.entity.PerformanceAppraisalProject; | ||||
import com.ningdatech.pmapi.performance.service.IPerformanceAppraisalProjectService; | import com.ningdatech.pmapi.performance.service.IPerformanceAppraisalProjectService; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum; | import com.ningdatech.pmapi.projectlib.enumeration.InstTypeEnum; | ||||
@@ -102,13 +105,14 @@ public class CockpitStatsStatisticsTask { | |||||
private IGovBizProjectCimplementService cimplementService; | private IGovBizProjectCimplementService cimplementService; | ||||
@Autowired | @Autowired | ||||
private IGovOperationProjectBaseinfoService operationBaseInfoService; | |||||
@Autowired | |||||
private IEarlyWarningRecordsService earlyWarningRecordsService; | private IEarlyWarningRecordsService earlyWarningRecordsService; | ||||
private List<Integer> years = Lists.newArrayList(2021,2022,2023,2024,2025); | private List<Integer> years = Lists.newArrayList(2021,2022,2023,2024,2025); | ||||
private final IMetaTagService metaTagService; | |||||
private final IExpertTagService expertTagService; | |||||
/** | /** | ||||
* 定义统计 驾驶舱数据 每天3点开始执行一次 | * 定义统计 驾驶舱数据 每天3点开始执行一次 | ||||
* | * | ||||
@@ -363,18 +367,84 @@ public class CockpitStatsStatisticsTask { | |||||
} | } | ||||
//2.专家统计 | //2.专家统计 | ||||
List<String> lsRegionCodes = RegionConst.LS_ARR; | |||||
List<ExpertUserFullInfo> experts = expertUserFullInfoService.list(Wrappers.lambdaQuery(ExpertUserFullInfo.class) | List<ExpertUserFullInfo> experts = expertUserFullInfoService.list(Wrappers.lambdaQuery(ExpertUserFullInfo.class) | ||||
.eq(StringUtils.isNotBlank(regionCode) && !DashboardConstant.CockpitStats.TOTAL.equals(regionCode), | .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.setExpertTotalNum(experts.size()); | ||||
cockpitStats.setExpertFinancialNum(0); | Integer financialNum = 0; | ||||
cockpitStats.setExpertNetworkSecurityNum(0); | Integer networkSecurityNum = 0; | ||||
cockpitStats.setExpertXinchuangNum(0); | Integer xinchuangNum = 0; | ||||
cockpitStats.setExpertPlanRationalityNum(0); | Integer planRationalityNum = 0; | ||||
cockpitStats.setExpertPromotionInfoTechnologyNum(0); | Integer promotionInfoTechnologyNum = 0; | ||||
cockpitStats.setExpertPartyGovInfoNum(0); | Integer partyGovInfoNum = 0; | ||||
cockpitStats.setExpertSoftHardPricingNum(0); | Integer softHardPricingNum = 0; | ||||
cockpitStats.setExpertTechnicalFeasibilityAssessmentNum(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.顶部数据 | ||||
//3.1 计划项目数(申报项目:完成年度计划的项目总数 | //3.1 计划项目数(申报项目:完成年度计划的项目总数 | ||||
@@ -32,14 +32,12 @@ import com.wflow.service.IEarlyWarningService; | |||||
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.checkerframework.checker.nullness.qual.Nullable; | |||||
import org.springframework.beans.factory.annotation.Value; | import org.springframework.beans.factory.annotation.Value; | ||||
import org.springframework.scheduling.annotation.Scheduled; | import org.springframework.scheduling.annotation.Scheduled; | ||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import java.net.InetAddress; | import java.net.InetAddress; | ||||
import java.net.UnknownHostException; | import java.net.UnknownHostException; | ||||
import java.time.*; | import java.time.*; | ||||
import java.util.ArrayList; | |||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | import java.util.Map; | ||||
import java.util.Objects; | import java.util.Objects; | ||||
@@ -231,9 +229,11 @@ public class EarlyWarningInstanceNotStartTask { | |||||
List<Integer> noticeTypes = noticeMap.get(needToWaringProject.getProjectCode()); | List<Integer> noticeTypes = noticeMap.get(needToWaringProject.getProjectCode()); | ||||
for(Integer noticeType : noticeTypes) { | for(Integer noticeType : noticeTypes) { | ||||
for (String employeeCode : batchEmployees) { | 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, | 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 time = rJson.getInteger("time"); | ||||
Integer adventTime = rJson.getInteger("adventTime"); | Integer adventTime = rJson.getInteger("adventTime"); | ||||
Integer biz = rJson.getInteger("biz"); | Integer biz = rJson.getInteger("biz"); | ||||
String notice = rJson.getString("notice"); | |||||
if((Objects.isNull(time) && Objects.isNull(adventTime)) || Objects.isNull(biz)){ | if((Objects.isNull(time) && Objects.isNull(adventTime)) || Objects.isNull(biz)){ | ||||
log.info("规则数据 错误 :{}",rJson); | log.info("规则数据 错误 :{}",rJson); | ||||
return; | return; | ||||
@@ -379,13 +380,60 @@ public class EarlyWarningInstanceNotStartTask { | |||||
for(Project needToWaringProject : needToWaringProjects){ | 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())){ | if(noticeMap.containsKey(needToWaringProject.getProjectCode())){ | ||||
List<Integer> noticeTypes = noticeMap.get(needToWaringProject.getProjectCode()); | List<Integer> noticeTypes = noticeMap.get(needToWaringProject.getProjectCode()); | ||||
for(Integer noticeType : noticeTypes){ | for(Integer noticeType : noticeTypes){ | ||||
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,biz, | for (String employeeCode : batchEmployees) { | ||||
needToWaringProject.getUpdateOn(),employeeCode,needToWaringProject, | earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent, | ||||
WarningRuleTypeEnum.OPERATION_WARNING.getCode(),noticeType,path,employeeCode,null); | 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())){ | if(noticeTypeMap.containsKey(needToWaringProject.getProjectCode())){ | ||||
List<Integer> noticeTypes = noticeTypeMap.get(needToWaringProject.getProjectCode()); | List<Integer> noticeTypes = noticeTypeMap.get(needToWaringProject.getProjectCode()); | ||||
for(Integer noticeType : noticeTypes){ | for(Integer noticeType : noticeTypes){ | ||||
earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent,time,null, | earlyWarningManage.doEarlyWarning(noticeMethod,Objects.nonNull(noticeType)&¬iceType.equals(1) ? noticeContent : adventContent, | ||||
adventTime,time,null, | |||||
needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project, | needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project, | ||||
WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr,needToWaringProject.getId().toString()); | WarningRuleTypeEnum.RENEWAL_FUND.getCode(),noticeType,path,employeesStr,needToWaringProject.getId().toString()); | ||||
} | } | ||||
@@ -3,6 +3,7 @@ package com.ningdatech.pmapi.scheduler.task; | |||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.date.StopWatch; | import cn.hutool.core.date.StopWatch; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.google.common.collect.Sets; | |||||
import com.ningdatech.pmapi.common.constant.BizConst; | import com.ningdatech.pmapi.common.constant.BizConst; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum; | import com.ningdatech.pmapi.projectlib.enumeration.ProjectRenewalApprovalStatusEnum; | ||||
import com.ningdatech.pmapi.projectlib.enumeration.WarningFlowTypeEnum; | import com.ningdatech.pmapi.projectlib.enumeration.WarningFlowTypeEnum; | ||||
@@ -29,7 +30,9 @@ import java.net.InetAddress; | |||||
import java.net.UnknownHostException; | import java.net.UnknownHostException; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.List; | import java.util.List; | ||||
import java.util.Map; | |||||
import java.util.Objects; | import java.util.Objects; | ||||
import java.util.Set; | |||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
/** | /** | ||||
@@ -74,6 +77,10 @@ public class EarlyWarningProjectTask { | |||||
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | ||||
return; | 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<ProjectEarlyWarning> warnings = projectEarlyWarningService.list(); | ||||
List<String> warningProjectCodes = warnings.stream().map(ProjectEarlyWarning::getProjectCode) | List<String> warningProjectCodes = warnings.stream().map(ProjectEarlyWarning::getProjectCode) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
@@ -105,7 +112,17 @@ public class EarlyWarningProjectTask { | |||||
projectEarlyWarningService.saveBatch(toAdd); | 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()); | List<ProjectEarlyWarning> trueWarnings = warnings.stream().filter(w -> Objects.nonNull(w.getNormal()) && !w.getNormal()).collect(Collectors.toList()); | ||||
if(CollUtil.isEmpty(trueWarnings)){ | if(CollUtil.isEmpty(trueWarnings)){ | ||||
log.info("没有异常的项目 要去查询"); | log.info("没有异常的项目 要去查询"); | ||||
@@ -113,36 +130,40 @@ public class EarlyWarningProjectTask { | |||||
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | ||||
return; | 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()) | List<ProjectEarlyWarning> processWarning = trueWarnings.stream().filter(w -> Objects.nonNull(w.getProcessWarning()) | ||||
&& w.getProcessWarning()) | && w.getProcessWarning()) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
checkProcessWarning(processWarning); | checkProcessWarning(processWarning); | ||||
//2.2 填报预警 如果正常了 要改会正常 | //3.2 填报预警 如果正常了 要改会正常 | ||||
List<ProjectEarlyWarning> declaredWarning = trueWarnings.stream().filter(w -> | List<ProjectEarlyWarning> declaredWarning = trueWarnings.stream().filter(w -> | ||||
Objects.nonNull(w.getDeclaredWarning()) | Objects.nonNull(w.getDeclaredWarning()) | ||||
&& w.getDeclaredWarning()) | && w.getDeclaredWarning()) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
checkDeclaredWarning(declaredWarning); | checkDeclaredWarning(declaredWarning); | ||||
//2.3 实施预警 如果正常了 要改会正常 | //3.3 实施预警 如果正常了 要改会正常 | ||||
List<ProjectEarlyWarning> operationWarning = trueWarnings.stream().filter(w -> | List<ProjectEarlyWarning> operationWarning = trueWarnings.stream().filter(w -> | ||||
Objects.nonNull(w.getOperationWarning()) | Objects.nonNull(w.getOperationWarning()) | ||||
&& w.getOperationWarning()) | && w.getOperationWarning()) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
checkOperationWarning(operationWarning); | checkOperationWarning(operationWarning); | ||||
//2.4 续建资金预警 如果正常了 要改会正常 | //3.4 续建资金预警 如果正常了 要改回正常 | ||||
List<ProjectEarlyWarning> renewalFundWarning = trueWarnings.stream().filter(w -> | List<ProjectEarlyWarning> renewalFundWarning = trueWarnings.stream().filter(w -> | ||||
Objects.nonNull(w.getRenewalFundWarning()) | Objects.nonNull(w.getRenewalFundWarning()) | ||||
&& w.getRenewalFundWarning()) | && w.getRenewalFundWarning()) | ||||
.collect(Collectors.toList()); | .collect(Collectors.toList()); | ||||
checkRenewalFundWarning(renewalFundWarning); | checkRenewalFundWarning(renewalFundWarning); | ||||
stopWatch.stop(); | |||||
log.info("=========== 预警项目维度任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | |||||
} | } | ||||
private void checkRenewalFundWarning(List<ProjectEarlyWarning> renewalFundWarnings) { | private void checkRenewalFundWarning(List<ProjectEarlyWarning> renewalFundWarnings) { | ||||
@@ -16,6 +16,7 @@ import com.ningdatech.pmapi.sys.service.INotifyService; | |||||
import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo; | import com.ningdatech.pmapi.todocenter.bean.entity.WorkNoticeInfo; | ||||
import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | import com.ningdatech.pmapi.user.security.auth.model.UserFullInfoDTO; | ||||
import com.ningdatech.yxt.model.cmd.SendSmsCmd; | import com.ningdatech.yxt.model.cmd.SendSmsCmd; | ||||
import com.wflow.enums.WarningNoticeTypeEnum; | |||||
import com.wflow.enums.WarningRuleTypeEnum; | import com.wflow.enums.WarningRuleTypeEnum; | ||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
@@ -51,12 +52,12 @@ public class EarlyWarningManage { | |||||
* 预警通知 | * 预警通知 | ||||
* @param noticeMethod | * @param noticeMethod | ||||
* @param noticeContent | * @param noticeContent | ||||
* @param timeout | * @param adventTimeout | ||||
* @param employeeCode | * @param employeeCode | ||||
* @param project | * @param project | ||||
*/ | */ | ||||
public void doEarlyWarning(String noticeMethod,String noticeContent, Integer timeout,Integer biz, | public void doEarlyWarning(String noticeMethod,String noticeContent, Integer adventTimeout,Integer overTimeout, | ||||
LocalDateTime startTime,String employeeCode, | Integer biz, LocalDateTime startTime,String employeeCode, | ||||
Project project,Integer ruleType,Integer noticeType, | Project project,Integer ruleType,Integer noticeType, | ||||
String path,String batchEmployees,String nodeId) { | String path,String batchEmployees,String nodeId) { | ||||
//1.存入 预警记录 | //1.存入 预警记录 | ||||
@@ -66,22 +67,53 @@ public class EarlyWarningManage { | |||||
switch (WarningRuleTypeEnum.checkByCode(ruleType)){ | switch (WarningRuleTypeEnum.checkByCode(ruleType)){ | ||||
case PROCESS_WARNING: | case PROCESS_WARNING: | ||||
content = convertContent(noticeContent,project.getProjectName(), | if(Objects.isNull(noticeType)){ | ||||
InstTypeEnum.getByCode(biz),timeout); | 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()); | records.setRuleType(WarningRuleTypeEnum.PROCESS_WARNING.getCode()); | ||||
break; | break; | ||||
case DECLARED_WARNING: | case DECLARED_WARNING: | ||||
content = convertContent(noticeContent,project.getProjectName(), | if(Objects.isNull(noticeType)){ | ||||
WarningFlowTypeEnum.getByCode(biz),timeout); | 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()); | records.setRuleType(WarningRuleTypeEnum.DECLARED_WARNING.getCode()); | ||||
break; | break; | ||||
case OPERATION_WARNING: | case OPERATION_WARNING: | ||||
content = convertContent(noticeContent,project.getProjectName(), | if(Objects.isNull(noticeType)){ | ||||
WarningOperationTypeEnum.getByCode(biz),timeout); | 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()); | records.setRuleType(WarningRuleTypeEnum.OPERATION_WARNING.getCode()); | ||||
break; | break; | ||||
case RENEWAL_FUND: | 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()); | records.setRuleType(WarningRuleTypeEnum.RENEWAL_FUND.getCode()); | ||||
break; | break; | ||||
default: | default: | ||||
@@ -147,6 +179,13 @@ public class EarlyWarningManage { | |||||
log.info("通知内容 :{}",noticeContent); | log.info("通知内容 :{}",noticeContent); | ||||
return 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; | 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) { | private String convertContent(String noticeContent, String projectName, WarningFlowTypeEnum warningFlowTypeEnum, Integer timeout) { | ||||
noticeContent = noticeContent.replace("{projectName}",projectName) | noticeContent = noticeContent.replace("{projectName}",projectName) | ||||
.replace("{flowType}",Objects.nonNull(warningFlowTypeEnum) ? warningFlowTypeEnum.getDesc() : "{flowType}") | .replace("{flowType}",Objects.nonNull(warningFlowTypeEnum) ? warningFlowTypeEnum.getDesc() : "{flowType}") | ||||
@@ -174,6 +223,16 @@ public class EarlyWarningManage { | |||||
return noticeContent; | 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) { | private String convertContent(String noticeContent, String projectName, WarningOperationTypeEnum operationTypeEnum, Integer timeout) { | ||||
noticeContent = noticeContent.replace("{projectName}",projectName) | noticeContent = noticeContent.replace("{projectName}",projectName) | ||||
.replace("{flowType}",Objects.nonNull(operationTypeEnum) ? operationTypeEnum.getDesc() : "{flowType}") | .replace("{flowType}",Objects.nonNull(operationTypeEnum) ? operationTypeEnum.getDesc() : "{flowType}") | ||||
@@ -182,4 +241,14 @@ public class EarlyWarningManage { | |||||
log.info("通知内容 :{}",noticeContent); | log.info("通知内容 :{}",noticeContent); | ||||
return 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; | |||||
} | |||||
} | } |
@@ -115,10 +115,9 @@ public class WorkbenchManage { | |||||
//这个不能放入子线程 | //这个不能放入子线程 | ||||
ProjectListReq projectListReq = new ProjectListReq(); | ProjectListReq projectListReq = new ProjectListReq(); | ||||
projectListReq.setPageNumber(1); | projectListReq.setPageNumber(1); | ||||
projectListReq.setPageSize(5); | projectListReq.setPageSize(2000); | ||||
projectListReq.setProjectYear(year); | projectListReq.setProjectYear(year); | ||||
projectListReq.setBuildOrgCode(user.getEmpPosUnitCode()); | res.setProjects(new ArrayList<>(projectLibManage.listWithPermissionWorkbentch(projectListReq,user).getRecords())); | ||||
res.setProjects(new ArrayList<>(projectLibManage.projectLibListApprove(projectListReq, user).getRecords())); | |||||
return res; | return res; | ||||
} | } | ||||
@@ -294,7 +293,8 @@ public class WorkbenchManage { | |||||
Long between = ChronoUnit.HOURS.between(instStart,LocalDateTime.now()); | Long between = ChronoUnit.HOURS.between(instStart,LocalDateTime.now()); | ||||
Integer times = 0; | Integer times = 0; | ||||
for(String employee : employees){ | for(String employee : employees){ | ||||
earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue(),biz, | earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,between.intValue() | ||||
,between.intValue(),biz, | |||||
instStart,employee,project, | instStart,employee,project, | ||||
ruleType,noticeType,path,batchEmployees,record.getNodeId()); | ruleType,noticeType,path,batchEmployees,record.getNodeId()); | ||||
times++; | times++; | ||||