@@ -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)--------------------------------------------------------- | |||
@@ -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()); | |||
@@ -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; | |||
@@ -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 | |||
@@ -54,5 +54,8 @@ public class ProtraitProjectInfoVO { | |||
@ApiModelProperty("项目状态情况") | |||
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.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) { | |||
@@ -91,6 +91,9 @@ public class GovBizProjectBaseinfoDTO implements Serializable { | |||
@ApiModelProperty("数据来源") | |||
private String areaCode; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
@ApiModelProperty("生产时间") | |||
private LocalDateTime bizTime; | |||
@@ -93,6 +93,9 @@ public class GovOperationProjectBaseinfoDTO implements Serializable { | |||
@ApiModelProperty("数据来源") | |||
private String areaCode; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
@ApiModelProperty("生产时间") | |||
private LocalDateTime bizTime; | |||
@@ -111,6 +111,9 @@ public class GovBizProjectBaseinfo implements Serializable { | |||
@ApiModelProperty("逻辑删除") | |||
private Boolean deleted; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
@ApiModelProperty("最后修改时间") | |||
private LocalDateTime updateOn; | |||
@@ -113,6 +113,9 @@ public class GovOperationProjectBaseinfo implements Serializable { | |||
@ApiModelProperty("逻辑删除") | |||
private Boolean deleted; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
@ApiModelProperty("最后修改时间") | |||
private LocalDateTime updateOn; | |||
@@ -93,6 +93,9 @@ public class GovBizProjectBaseinfoVO implements Serializable { | |||
@ApiModelProperty("数据来源") | |||
private String areaCode; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
@ApiModelProperty("生产时间") | |||
private LocalDateTime bizTime; | |||
@@ -96,6 +96,9 @@ public class GovOperationProjectBaseinfoVO implements Serializable { | |||
@ApiModelProperty("数据来源") | |||
private String areaCode; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
@ApiModelProperty("生产时间") | |||
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("是否推送省里") | |||
private Boolean push; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
} |
@@ -361,4 +361,7 @@ public class ProjectDraftVO implements Serializable { | |||
@ApiModelProperty("是否推送省里") | |||
private Boolean push; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
} |
@@ -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){ | |||
@@ -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)){ | |||
@@ -370,4 +370,7 @@ public class ProjectDTO implements Serializable { | |||
@ApiModelProperty("是否推送省里") | |||
private Boolean push; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
} |
@@ -567,4 +567,7 @@ public class Project implements Serializable { | |||
@ApiModelProperty("是否推送省里") | |||
private Boolean push; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
} |
@@ -549,4 +549,7 @@ public class ProjectDetailVO { | |||
@ApiModelProperty("是否推送省里") | |||
private Boolean push; | |||
@ApiModelProperty("系统定位") | |||
private String systemPosition; | |||
} |
@@ -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); | |||
@@ -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 计划项目数(申报项目:完成年度计划的项目总数 | |||
@@ -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)&¬iceType.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)&¬iceType.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)&¬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, | |||
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.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) { | |||
@@ -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; | |||
} | |||
} |
@@ -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++; | |||