From b80efd76ce66662c144fe8ee76cfa3a2f292da85 Mon Sep 17 00:00:00 2001 From: PoffyZhang <99775271@qq.com> Date: Tue, 31 Oct 2023 14:32:34 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=90=E7=BB=B4=E9=A1=B9=E7=9B=AE=20?= =?UTF-8?q?=E6=8E=A8=E9=80=81=20=E9=A2=84=E8=AD=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pmapi/common/helper/UserInfoHelper.java | 2 +- .../common/helper/impl/UserInfoHelperImpl.java | 22 ++++ .../controller/GovProjectCollectionController.java | 6 +- .../pmapi/gov/convert/ProjectConvert.java | 17 +++ .../gov/manage/GovProjectCollectionManage.java | 29 ++++-- .../model/dto/GovOperationProjectBaseinfoDTO.java | 104 ++++++++++++++++++ .../gov/model/dto/GovOperationProjectSaveDTO.java | 50 +++++++++ .../model/entity/GovOperationProjectBaseinfo.java | 3 + .../model/vo/GovOperationProjectBaseinfoVO.java | 116 +++++++++++++++++++++ .../gov/model/vo/GovOperationProjectDetailVO.java | 50 +++++++++ .../utils/GenerateProjectCodeUtil.java | 51 ++++++++- .../task/EarlyWarningInstanceNotStartTask.java | 106 ++++++++++++++++++- .../scheduler/task/SynProjectCollectionTask.java | 9 +- .../pmapi/projectCollection/ProjectRemoveTest.java | 2 +- 14 files changed, 549 insertions(+), 18 deletions(-) create mode 100644 pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectBaseinfoDTO.java create mode 100644 pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectSaveDTO.java create mode 100644 pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectBaseinfoVO.java create mode 100644 pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectDetailVO.java diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/UserInfoHelper.java b/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/UserInfoHelper.java index 306a086..8a5f493 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/UserInfoHelper.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/UserInfoHelper.java @@ -48,5 +48,5 @@ public interface UserInfoHelper { */ String getUserEmpPosUnitCode(Long userId); - + List getUsersByRoleType(String roleType); } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/UserInfoHelperImpl.java b/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/UserInfoHelperImpl.java index e02c0dc..24e947c 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/UserInfoHelperImpl.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/common/helper/impl/UserInfoHelperImpl.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.google.common.collect.Lists; +import com.ningdatech.pmapi.common.constant.BizConst; import com.ningdatech.pmapi.common.helper.UserInfoHelper; import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo; import com.ningdatech.pmapi.organization.model.entity.DingOrganization; @@ -13,6 +14,7 @@ import com.ningdatech.pmapi.organization.service.IDingOrganizationService; import com.ningdatech.pmapi.sys.mapper.RoleMapper; import com.ningdatech.pmapi.sys.model.entity.Role; import com.ningdatech.pmapi.sys.model.entity.UserRole; +import com.ningdatech.pmapi.sys.service.IRoleService; import com.ningdatech.pmapi.sys.service.IUserRoleService; import com.ningdatech.pmapi.user.constant.UserAvailableEnum; import com.ningdatech.pmapi.user.entity.UserInfo; @@ -41,6 +43,8 @@ public class UserInfoHelperImpl implements UserInfoHelper { private final IUserRoleService iUserRoleService; private final RoleMapper roleMapper; + private final IRoleService roleService; + @Override public String getOrganizationCode(Long userId) { @@ -234,4 +238,22 @@ public class UserInfoHelperImpl implements UserInfoHelper { UserFullInfoDTO userFullInfo = getUserFullInfo(userId); return userFullInfo.getEmpPosUnitCode(); } + + @Override + public List getUsersByRoleType(String roleType) { + Role regionRole = roleService.getOne(Wrappers.lambdaQuery(Role.class) + .eq(Role::getCode, roleType) + .last(BizConst.LIMIT_1)); + if(Objects.isNull(regionRole)){ + return Collections.emptyList(); + } + List userRoles = iUserRoleService.list(Wrappers.lambdaQuery(UserRole.class) + .eq(UserRole::getRoleId, regionRole.getId())); + if(CollUtil.isEmpty(userRoles)){ + return Collections.emptyList(); + } + List userIds = userRoles.stream().map(UserRole::getUserId) + .collect(Collectors.toList()); + return userInfoService.listByIds(userIds); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/controller/GovProjectCollectionController.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/controller/GovProjectCollectionController.java index 610b943..0203ee7 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/gov/controller/GovProjectCollectionController.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/controller/GovProjectCollectionController.java @@ -4,8 +4,10 @@ import com.ningdatech.basic.model.PageVo; import com.ningdatech.log.annotation.WebLog; import com.ningdatech.pmapi.gov.manage.GovProjectCollectionManage; import com.ningdatech.pmapi.gov.model.dto.GovBizProjectSaveDTO; +import com.ningdatech.pmapi.gov.model.dto.GovOperationProjectSaveDTO; import com.ningdatech.pmapi.gov.model.vo.GovBizProjectDetailVO; import com.ningdatech.pmapi.gov.model.vo.GovBizProjectListVO; +import com.ningdatech.pmapi.gov.model.vo.GovOperationProjectDetailVO; import com.ningdatech.pmapi.gov.model.vo.GovProjectDictionaryVO; import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; import com.ningdatech.pmapi.scheduler.task.SynProjectCollectionTask; @@ -66,7 +68,7 @@ public class GovProjectCollectionController { @GetMapping("/operation/detail/{projId}") @ApiOperation("运维项目归集详情") - public GovBizProjectDetailVO operationDetail(@PathVariable String projId) { + public GovOperationProjectDetailVO operationDetail(@PathVariable String projId) { return collectionManage.operationDetail(projId); } @@ -80,7 +82,7 @@ public class GovProjectCollectionController { @PostMapping("/operation/save") @ApiOperation("运维项目归集保存") @WebLog("运维项目归集保存") - public String operationSave(@Valid @RequestBody GovBizProjectSaveDTO saveDTO) { + public String operationSave(@Valid @RequestBody GovOperationProjectSaveDTO saveDTO) { return collectionManage.operationSave(saveDTO,null); } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/convert/ProjectConvert.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/convert/ProjectConvert.java index 60906eb..d1b686b 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/gov/convert/ProjectConvert.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/convert/ProjectConvert.java @@ -62,6 +62,17 @@ public class ProjectConvert { return req; } + public static ProjectPushReq convertWithConvertPdf(GovOperationProjectDetailVO vo) { + ProjectPushReq req = new ProjectPushReq(); + req.setBaseinfo(convertBaseVo(vo.getBaseinfo(),BizProjectContant.EFFECTIVE_CODE)); + req.setApply(convertApplyVoWithConvertPdf(vo.getApply())); + req.setApprove(convertApproveVoWithConvertPdf(vo.getApprove())); + req.setCimplement(convertCimplementVoWithConvertPdf(vo.getCimplement())); + req.setMimplement(convertMimplementVoWithConvertPdf(vo.getMimplement())); + req.setProcures(convertProcuresVoWithConvertPdf(vo.getProcures())); + return req; + } + private static List convertProcures(List procures) { if(CollUtil.isEmpty(procures)){ return Collections.emptyList(); @@ -430,4 +441,10 @@ public class ProjectConvert { req.setIsEffective(isEffective); return req; } + + public static ProjectBaseInfoReq convertBaseVo(GovOperationProjectBaseinfoVO baseinfo,String isEffective) { + ProjectBaseInfoReq req = BeanUtil.copyProperties(baseinfo,ProjectBaseInfoReq.class); + req.setIsEffective(isEffective); + return req; + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/manage/GovProjectCollectionManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/manage/GovProjectCollectionManage.java index d02bd02..108f059 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/gov/manage/GovProjectCollectionManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/manage/GovProjectCollectionManage.java @@ -441,8 +441,8 @@ public class GovProjectCollectionManage { return res; } - public GovBizProjectDetailVO operationDetail(String projId) { - GovBizProjectDetailVO res = new GovBizProjectDetailVO(); + public GovOperationProjectDetailVO operationDetail(String projId) { + GovOperationProjectDetailVO res = new GovOperationProjectDetailVO(); //1.先查 基本信息 GovOperationProjectBaseinfo baseinfo = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) .eq(GovOperationProjectBaseinfo::getBaseProjId, projId) @@ -454,7 +454,7 @@ public class GovProjectCollectionManage { } res.setBaseProjId(baseinfo.getBaseProjId()); res.setBaseProjName(baseinfo.getBaseProjName()); - res.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovBizProjectBaseinfoVO.class)); + res.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovOperationProjectBaseinfoVO.class)); //2.再查 申报信息 GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class) @@ -841,18 +841,18 @@ public class GovProjectCollectionManage { * @param user * @return */ - public String operationSave(GovBizProjectSaveDTO saveDTO, UserInfoDetails user) { + public String operationSave(GovOperationProjectSaveDTO saveDTO, UserInfoDetails user) { if(Objects.isNull(user)){ user = LoginUserUtil.loginUserDetail(); } - GovBizProjectBaseinfoDTO base = saveDTO.getBaseinfo(); + GovOperationProjectBaseinfoDTO base = saveDTO.getBaseinfo(); String baseProjId = saveDTO.getBaseProjId(); String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST; String baseProjName = base.getBaseProjName(); //1.保存基本信息 - GovBizProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo(); + GovOperationProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo(); baseinfo.setBaseProjId(baseProjId); baseinfo.setBaseProjName(baseProjName); baseinfo.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE); @@ -1379,6 +1379,23 @@ public class GovProjectCollectionManage { } } + public void pushProjectVo(GovOperationProjectDetailVO vo) { + String url = pushUrl; + ProjectPushReq req = ProjectConvert.convertWithConvertPdf(vo); + try{ + log.info("推送消息体 {} ,{},{}",vo.getBaseProjId(),url, JSON.toJSONString(req)); + HttpHeaders headers = new HttpHeaders(); + MediaType type = MediaType.parseMediaType("application/json; charset=UTF-8"); + headers.setContentType(type); + headers.add("Accept", MediaType.APPLICATION_JSON.toString()); + HttpEntity formEntity = new HttpEntity(req, headers); + ResponseEntity response = restTemplate.postForEntity(url, formEntity, String.class); + log.info("推送结果 {} :{}",vo.getBaseProjId(),response); + }catch (Exception e){ + log.info("推送失败,{}",e.getMessage()); + } + } + /** * 把项目置为无效 * @param baseinfo diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectBaseinfoDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectBaseinfoDTO.java new file mode 100644 index 0000000..cbac955 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectBaseinfoDTO.java @@ -0,0 +1,104 @@ +package com.ningdatech.pmapi.gov.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 项目基本信息表 + *

+ * + * @author ZPF + * @since 2023-08-02 + */ +@Data +@ApiModel(value = "GovBizProjectBaseinfo对象", description = "项目基本信息表") +public class GovOperationProjectBaseinfoDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("项目编号") + private String baseProjId; + + @ApiModelProperty("是否推送 省局归集") + private Boolean push; + + @ApiModelProperty("基本项目名称") + private String baseProjName; + + @ApiModelProperty("基本项目区域code") + private String baseAreaCode; + + @ApiModelProperty("基本项目区域名") + private String baseAreaName; + + @ApiModelProperty("是否涉密") + private String baseProjIsConfidentiality; + + @ApiModelProperty("项目类型") + private String baseProjType; + + @ApiModelProperty("内容类别") + private String baseConstructionType; + + @ApiModelProperty("项目状态") + private String baseProjSetProg; + + @ApiModelProperty("信息是否有效") + private String isEffective; + + @ApiModelProperty("上级主管单位") + private String baseProvManDeprt; + + @ApiModelProperty("上级主管单位钉id") + private String baseProvManDeprtDing; + + @ApiModelProperty("是否省级 1省级 2非省级") + private Integer baseProvManDeprtType; + + @ApiModelProperty("本级主管单位") + private String baseManDeprt; + + @ApiModelProperty("本级主管单位ding code") + private String baseManDeprtDing; + + @ApiModelProperty("本级主管单位社会统一信用代码") + private String baseManDepartUsci; + + @ApiModelProperty("建设单位") + private String baseBuildDeprt; + + @ApiModelProperty("建设单位Ding Code") + private String baseBuildDeprtDing; + + @ApiModelProperty("建设单位社会统一信用代码") + private String baseBuildDepartUsci; + + @ApiModelProperty("项目负责人") + private String baseProjPrincipal; + + @ApiModelProperty("项目负责人手机号") + private String baseProjPrincipalCall; + + @ApiModelProperty("项目联系人") + private String baseProjContacts; + + @ApiModelProperty("项目联系人联系方式") + private String baseProjContactsCall; + + @ApiModelProperty("数据来源") + private String areaCode; + + @ApiModelProperty("生产时间") + private LocalDateTime bizTime; + + @ApiModelProperty("操作标记") + private String op; + + @ApiModelProperty("入库时间") + private LocalDateTime tongTime; +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectSaveDTO.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectSaveDTO.java new file mode 100644 index 0000000..f2768f1 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/dto/GovOperationProjectSaveDTO.java @@ -0,0 +1,50 @@ +package com.ningdatech.pmapi.gov.model.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * 项目归集总VO + *

+ * + * @author ZPF + * @since 2023-08-02 + */ +@Data +@ApiModel(value = "GovOperationProjectSaveDTO", description = "运维项目总详情DTO") +public class GovOperationProjectSaveDTO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("项目编号") + private String baseProjId; + + @ApiModelProperty("基本项目名称") + private String baseProjName; + + @ApiModelProperty("草稿id") + private Long draftId; + + @ApiModelProperty("项目基本信息") + private GovOperationProjectBaseinfoDTO baseinfo; + + @ApiModelProperty("项目申报信息") + private GovBizProjectApplyDTO apply; + + @ApiModelProperty("项目审批信息") + private GovBizProjectApproveDTO approve; + + @ApiModelProperty("实施项目实施信息") + private GovBizProjectCimplementDTO cimplement; + + @ApiModelProperty("运维项目实施信息") + private GovBizProjectMimplementDTO mimplement; + + @ApiModelProperty("项目采购信息") + private List procures; +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovOperationProjectBaseinfo.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovOperationProjectBaseinfo.java index 744e507..f82f5a0 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovOperationProjectBaseinfo.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/entity/GovOperationProjectBaseinfo.java @@ -29,6 +29,9 @@ public class GovOperationProjectBaseinfo implements Serializable { @TableId(type = IdType.AUTO) private Long id; + @ApiModelProperty("是否推送 省局归集") + private Boolean push; + @ApiModelProperty("项目编号") private String baseProjId; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectBaseinfoVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectBaseinfoVO.java new file mode 100644 index 0000000..18e8f3e --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectBaseinfoVO.java @@ -0,0 +1,116 @@ +package com.ningdatech.pmapi.gov.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.time.LocalDateTime; + +/** + *

+ * 项目基本信息表 + *

+ * + * @author ZPF + * @since 2023-08-02 + */ +@Data +@ApiModel(value = "GovBizProjectBaseinfo对象", description = "项目基本信息表") +public class GovOperationProjectBaseinfoVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("主键") + private Long id; + + @ApiModelProperty("是否推送 省局归集") + private Boolean push; + + @ApiModelProperty("项目编号") + private String baseProjId; + + @ApiModelProperty("基本项目名称") + private String baseProjName; + + @ApiModelProperty("基本项目区域code") + private String baseAreaCode; + + @ApiModelProperty("基本项目区域名") + private String baseAreaName; + + @ApiModelProperty("是否涉密") + private String baseProjIsConfidentiality; + + @ApiModelProperty("项目类型") + private String baseProjType; + + @ApiModelProperty("内容类别") + private String baseConstructionType; + + @ApiModelProperty("项目状态") + private String baseProjSetProg; + + @ApiModelProperty("信息是否有效") + private String isEffective; + + @ApiModelProperty("是否省级 1省级 2非省级") + private Integer baseProvManDeprtType; + + @ApiModelProperty("上级主管单位") + private String baseProvManDeprt; + + @ApiModelProperty("上级主管单位钉id") + private String baseProvManDepartDing; + + @ApiModelProperty("本级主管单位") + private String baseManDeprt; + + @ApiModelProperty("本级主管单位ding code") + private String baseManDeprtDing; + + @ApiModelProperty("本级主管单位社会统一信用代码") + private String baseManDepartUsci; + + @ApiModelProperty("建设单位") + private String baseBuildDeprt; + + @ApiModelProperty("建设单位Ding Code") + private String baseBuildDeprtDing; + + @ApiModelProperty("建设单位社会统一信用代码") + private String baseBuildDepartUsci; + + @ApiModelProperty("项目负责人") + private String baseProjPrincipal; + + @ApiModelProperty("项目负责人手机号") + private String baseProjPrincipalCall; + + @ApiModelProperty("项目联系人") + private String baseProjContacts; + + @ApiModelProperty("项目联系人联系方式") + private String baseProjContactsCall; + + @ApiModelProperty("数据来源") + private String areaCode; + + @ApiModelProperty("生产时间") + private LocalDateTime bizTime; + + @ApiModelProperty("操作标记") + private String op; + + @ApiModelProperty("入库时间") + private LocalDateTime tongTime; + + @ApiModelProperty("逻辑删除") + private Boolean deleted; + + @ApiModelProperty("最后修改时间") + private LocalDateTime updateOn; + + @ApiModelProperty("最后修改人") + private String updateBy; +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectDetailVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectDetailVO.java new file mode 100644 index 0000000..087361d --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/gov/model/vo/GovOperationProjectDetailVO.java @@ -0,0 +1,50 @@ +package com.ningdatech.pmapi.gov.model.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + *

+ * 运维项目总详情VO + *

+ * + * @author ZPF + * @since 2023-08-02 + */ +@Data +@ApiModel(value = "GovOperationProjectDetailVO", description = "运维项目总详情VO") +public class GovOperationProjectDetailVO implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty("项目编号") + private String baseProjId; + + @ApiModelProperty("基本项目名称") + private String baseProjName; + + @ApiModelProperty("草稿id") + private Long draftId; + + @ApiModelProperty("项目基本信息") + private GovOperationProjectBaseinfoVO baseinfo; + + @ApiModelProperty("项目申报信息") + private GovBizProjectApplyVO apply; + + @ApiModelProperty("项目审批信息") + private GovBizProjectApproveVO approve; + + @ApiModelProperty("实施项目实施信息") + private GovBizProjectCimplementVO cimplement; + + @ApiModelProperty("运维项目实施信息") + private GovBizProjectMimplementVO mimplement; + + @ApiModelProperty("项目采购信息") + private List procures; +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/utils/GenerateProjectCodeUtil.java b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/utils/GenerateProjectCodeUtil.java index 60111f7..a358dd1 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/utils/GenerateProjectCodeUtil.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/utils/GenerateProjectCodeUtil.java @@ -5,9 +5,7 @@ import com.ningdatech.basic.function.VUtils; import com.ningdatech.pmapi.common.constant.BizConst; import com.ningdatech.pmapi.common.constant.RegionConst; import com.ningdatech.pmapi.gov.contants.BizProjectContant; -import com.ningdatech.pmapi.gov.model.dto.GovBizProjectApplyDTO; -import com.ningdatech.pmapi.gov.model.dto.GovBizProjectBaseinfoDTO; -import com.ningdatech.pmapi.gov.model.dto.GovBizProjectSaveDTO; +import com.ningdatech.pmapi.gov.model.dto.*; import com.ningdatech.pmapi.gov.model.entity.GovBizProjectBaseinfo; import com.ningdatech.pmapi.gov.model.entity.GovOperationProjectBaseinfo; import com.ningdatech.pmapi.gov.service.IGovBizProjectBaseinfoService; @@ -169,4 +167,51 @@ public class GenerateProjectCodeUtil { // 生成20位的项目编号 return currentCode + String.format(ProjectCodeContant.SHUZI_5, max); } + + public String generateProjectCode(GovOperationProjectSaveDTO dto) { + // 获取所属行政区划代码(9位) + GovOperationProjectBaseinfoDTO baseinfo = dto.getBaseinfo(); + GovBizProjectApplyDTO apply = dto.getApply(); + + VUtils.isTrue(Objects.isNull(baseinfo)).throwMessage("没有项目基本信息 无法生成项目编号!"); + VUtils.isTrue(Objects.isNull(apply)).throwMessage("没有项目申报信息 无法生成项目编号!"); + + String areaCode = (StringUtils.isNotBlank(baseinfo.getBaseAreaCode()) ? baseinfo.getBaseAreaCode() : RegionConst.RC_LS + BizConst.NINE_AREA_CODE_LAST); + // 获取建设年度 (10-13) + String year = Objects.nonNull(apply.getBaseProjSetYear()) ? apply.getBaseProjSetYear() + : String.valueOf(LocalDateTime.now().getYear()); + // 14-15 项目类型 + String projectType = StringUtils.isNotBlank(baseinfo.getBaseProjType()) ? baseinfo.getBaseProjType() : + BizProjectContant.ProjectCollection.IS_EFFECTIVE; + String currentCode = areaCode + year + projectType; + // 16-20 项目序号00001 + //要查询 两边的项目序号 + Long max = 0L; + GovBizProjectBaseinfo baseMax = baseinfoService.getOne(Wrappers.lambdaQuery(GovBizProjectBaseinfo.class) + .like(GovBizProjectBaseinfo::getBaseProjId, currentCode) + .orderByDesc(GovBizProjectBaseinfo::getBaseProjId) + .last(BizConst.LIMIT_1)); + if(Objects.nonNull(baseMax) && StringUtils.isNotBlank(baseMax.getBaseProjId())){ + max = Long.valueOf(baseMax.getBaseProjId().substring(baseMax.getBaseProjId().length() - 5)); + } + GovOperationProjectBaseinfo operationBaseMax = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) + .like(GovOperationProjectBaseinfo::getBaseProjId, currentCode) + .orderByDesc(GovOperationProjectBaseinfo::getBaseProjId) + .last(BizConst.LIMIT_1)); + if(Objects.nonNull(operationBaseMax) && StringUtils.isNotBlank(operationBaseMax.getBaseProjId())){ + Long operationMax = Long.valueOf(baseMax.getBaseProjId().substring(baseMax.getBaseProjId().length() - 5)); + max = Math.max(max,operationMax); + } + Project projectMax = projectService.getOne(Wrappers.lambdaQuery(Project.class) + .like(Project::getProjectCode, currentCode) + .orderByDesc(Project::getProjectCode) + .last(BizConst.LIMIT_1)); + if(Objects.nonNull(projectMax) && StringUtils.isNotBlank(projectMax.getProjectCode())){ + Long projectMaxCode = Long.valueOf(projectMax.getProjectCode().substring(projectMax.getProjectCode().length() - 5)); + max = Math.max(max,projectMaxCode); + } + max = max + 1; + // 生成20位的项目编号 + return currentCode + String.format(ProjectCodeContant.SHUZI_5, max); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java index 4f0b423..d9a53ab 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/EarlyWarningInstanceNotStartTask.java @@ -8,18 +8,19 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ningdatech.pmapi.common.constant.BizConst; import com.ningdatech.pmapi.common.enumeration.CommonEnum; +import com.ningdatech.pmapi.common.helper.UserInfoHelper; import com.ningdatech.pmapi.projectdeclared.model.entity.Contract; import com.ningdatech.pmapi.projectdeclared.model.entity.Operation; import com.ningdatech.pmapi.projectdeclared.service.IContractService; import com.ningdatech.pmapi.projectdeclared.service.IOperationService; -import com.ningdatech.pmapi.projectlib.enumeration.ProjectStatusEnum; -import com.ningdatech.pmapi.projectlib.enumeration.WarningFlowTypeEnum; -import com.ningdatech.pmapi.projectlib.enumeration.WarningNoticeTypeEnum; -import com.ningdatech.pmapi.projectlib.enumeration.WarningOperationTypeEnum; +import com.ningdatech.pmapi.projectlib.enumeration.*; import com.ningdatech.pmapi.projectlib.model.entity.Project; +import com.ningdatech.pmapi.projectlib.model.entity.ProjectRenewalFundDeclaration; +import com.ningdatech.pmapi.projectlib.service.IProjectRenewalFundDeclarationService; import com.ningdatech.pmapi.projectlib.service.IProjectService; import com.ningdatech.pmapi.sys.manage.EarlyWarningManage; import com.ningdatech.pmapi.user.entity.UserInfo; +import com.ningdatech.pmapi.user.entity.enumeration.RoleEnum; import com.ningdatech.pmapi.user.service.IUserInfoService; import com.wflow.bean.entity.WflowEarlyWarning; import com.wflow.enums.WarningRuleTypeEnum; @@ -63,6 +64,10 @@ public class EarlyWarningInstanceNotStartTask { private final IUserInfoService userInfoService; + private final IProjectRenewalFundDeclarationService renewalFundDeclarationService; + + private final UserInfoHelper userInfoHelper; + @Scheduled(cron = "0 0/2 * * * ?") public void doEarlyWarningDeclared() throws UnknownHostException { if (!HOST_NAME.equals(InetAddress.getLocalHost().getHostName())) { @@ -331,4 +336,97 @@ public class EarlyWarningInstanceNotStartTask { stopWatch.stop(); log.info("=========== 预警实施超时任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); } + + /** + * 续建项目资金 超时未审批定时器 + * @throws UnknownHostException + */ + @Scheduled(cron = "20 0/2 * * * ?") + public void doEarlyWarningRenewalFund() throws UnknownHostException { + if (!HOST_NAME.equals(InetAddress.getLocalHost().getHostName())) { + return; + } + + log.info("=========== 预警续建资金项目 超时任务开始 ========"); + StopWatch stopWatch = new StopWatch(); + stopWatch.start(); + + // 1.查询 填报的 预警规则 填报类型的 每个区域 续建项目资金审批 + List warnings = earlyWarningService.list(Wrappers.lambdaQuery(WflowEarlyWarning.class) + .eq(WflowEarlyWarning::getRuleType, WarningRuleTypeEnum.RENEWAL_FUND.getCode())); + for(WflowEarlyWarning warning : warnings){ + //2. 取出rule的数据 + if(!warning.getIsOpen()){ + log.info(warning.getId() + " 此规则关闭了"); + continue; + } + + String noticeMethod = warning.getNoticeMethod(); + if(StringUtils.isBlank(noticeMethod) || + (!noticeMethod.contains(String.valueOf(CommonEnum.ZWDD.getCode())) && + !noticeMethod.contains(String.valueOf(CommonEnum.MOBILE.getCode())))){ + log.info("通知方式为空或者错误!"); + return; + } + + String noticeContent = warning.getNoticeContent(); + String rule = warning.getRule(); + if(StringUtils.isNotBlank(rule)){ + JSONArray ruleArray = JSON.parseArray(rule); + if(CollUtil.isNotEmpty(ruleArray)){ + ruleArray.forEach(r -> { + JSONObject rJson = JSON.parseObject(JSON.toJSONString(r)); + Integer time = rJson.getInteger("time"); + if(Objects.isNull(time)){ + log.info("规则数据 错误 :{}",rJson); + return; + } + + //得出 对应待提交的续建项目区域信息 + String areaCode = warning.getAreaCode(); + //测试先用分钟 + //查询 所有这个区域的项目 未提交的项目 + List needNextProjects = renewalFundDeclarationService.list(Wrappers.lambdaQuery(ProjectRenewalFundDeclaration.class) + .eq(ProjectRenewalFundDeclaration::getRegionCode, areaCode) + .eq(ProjectRenewalFundDeclaration::getDeleted,Boolean.FALSE) + .eq(ProjectRenewalFundDeclaration::getApprovalStatus, ProjectRenewalApprovalStatusEnum.PENDING.getCode())); + + //需要发通知的项目 + List needToWaringProjects = needNextProjects.stream() + .filter(p -> { + //初验 + if(Duration.between(p.getCreateOn(),LocalDateTime.now()).toMinutes() >= time * 60 && //time * 60 + Duration.between(p.getCreateOn(),LocalDateTime.now()).toMinutes() <= time * 60 + 1){ //time * 60 + return Boolean.TRUE; + } + + return Boolean.FALSE; + }) + .collect(Collectors.toList()); + + if(StringUtils.isBlank(noticeMethod) || + (!noticeMethod.contains(String.valueOf(CommonEnum.ZWDD.getCode())) && + !noticeMethod.contains(String.valueOf(CommonEnum.MOBILE.getCode())))){ + log.info("通知方式为空或者错误!"); + return; + } + + for(ProjectRenewalFundDeclaration needToWaringProject : needToWaringProjects){ + Project project = projectService.getProjectByCode(needToWaringProject.getProjectCode()); + //去预警通知 发给区管 + List users = userInfoHelper.getUsersByRoleType(RoleEnum.REGION_MANAGER.name()); + for(UserInfo user : users){ + earlyWarningManage.doEarlyWarning(noticeMethod,noticeContent,time,null, + needToWaringProject.getUpdateOn(),user.getEmployeeCode(),project, + WarningRuleTypeEnum.OPERATION_WARNING.getCode()); + } + } + }); + } + } + } + + stopWatch.stop(); + log.info("=========== 预警续建资金项目 超时任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); + } } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/SynProjectCollectionTask.java b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/SynProjectCollectionTask.java index b4b415d..690c7f0 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/SynProjectCollectionTask.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/scheduler/task/SynProjectCollectionTask.java @@ -9,6 +9,8 @@ import com.ningdatech.pmapi.gov.manage.GovProjectCollectionManage; import com.ningdatech.pmapi.gov.model.entity.*; import com.ningdatech.pmapi.gov.model.vo.GovBizProjectDetailVO; import com.ningdatech.pmapi.gov.model.vo.GovBizProjectListVO; +import com.ningdatech.pmapi.gov.model.vo.GovOperationProjectBaseinfoVO; +import com.ningdatech.pmapi.gov.model.vo.GovOperationProjectDetailVO; import com.ningdatech.pmapi.gov.service.*; import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; import lombok.RequiredArgsConstructor; @@ -106,7 +108,12 @@ public class SynProjectCollectionTask { PageVo operationList = collectionManage.operationList(req); log.info("operation list size :{}",operationList.getTotal()); for(GovBizProjectListVO vo : operationList.getRecords()){ - GovBizProjectDetailVO operationDetail = collectionManage.operationDetail(vo.getBaseProjId()); + GovOperationProjectDetailVO operationDetail = collectionManage.operationDetail(vo.getBaseProjId()); + GovOperationProjectBaseinfoVO baseinfo = operationDetail.getBaseinfo(); + if(Objects.isNull(baseinfo) || Objects.isNull(baseinfo.getPush()) || + Boolean.FALSE.equals(baseinfo.getPush())){ + log.info("此运维项目不用推送:" + vo.getBaseProjId()); + } collectionManage.pushProjectVo(operationDetail); } diff --git a/pmapi/src/test/java/com/ningdatech/pmapi/projectCollection/ProjectRemoveTest.java b/pmapi/src/test/java/com/ningdatech/pmapi/projectCollection/ProjectRemoveTest.java index 8aba6c6..818727e 100644 --- a/pmapi/src/test/java/com/ningdatech/pmapi/projectCollection/ProjectRemoveTest.java +++ b/pmapi/src/test/java/com/ningdatech/pmapi/projectCollection/ProjectRemoveTest.java @@ -109,7 +109,7 @@ public class ProjectRemoveTest extends AppTests { @Test public void test(){ - List projectCodes = Lists.newArrayList("33112600020240100001"); + List projectCodes = Lists.newArrayList("33112600020230100002"); for(String projectCode : projectCodes){ //项目