@@ -48,5 +48,5 @@ public interface UserInfoHelper { | |||||
*/ | */ | ||||
String getUserEmpPosUnitCode(Long userId); | String getUserEmpPosUnitCode(Long userId); | ||||
List<UserInfo> getUsersByRoleType(String roleType); | |||||
} | } |
@@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil; | |||||
import com.baomidou.mybatisplus.core.toolkit.StringUtils; | import com.baomidou.mybatisplus.core.toolkit.StringUtils; | ||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.ningdatech.pmapi.common.constant.BizConst; | |||||
import com.ningdatech.pmapi.common.helper.UserInfoHelper; | import com.ningdatech.pmapi.common.helper.UserInfoHelper; | ||||
import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo; | import com.ningdatech.pmapi.organization.model.entity.DingEmployeeInfo; | ||||
import com.ningdatech.pmapi.organization.model.entity.DingOrganization; | 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.mapper.RoleMapper; | ||||
import com.ningdatech.pmapi.sys.model.entity.Role; | import com.ningdatech.pmapi.sys.model.entity.Role; | ||||
import com.ningdatech.pmapi.sys.model.entity.UserRole; | 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.sys.service.IUserRoleService; | ||||
import com.ningdatech.pmapi.user.constant.UserAvailableEnum; | import com.ningdatech.pmapi.user.constant.UserAvailableEnum; | ||||
import com.ningdatech.pmapi.user.entity.UserInfo; | import com.ningdatech.pmapi.user.entity.UserInfo; | ||||
@@ -41,6 +43,8 @@ public class UserInfoHelperImpl implements UserInfoHelper { | |||||
private final IUserRoleService iUserRoleService; | private final IUserRoleService iUserRoleService; | ||||
private final RoleMapper roleMapper; | private final RoleMapper roleMapper; | ||||
private final IRoleService roleService; | |||||
@Override | @Override | ||||
public String getOrganizationCode(Long userId) { | public String getOrganizationCode(Long userId) { | ||||
@@ -234,4 +238,22 @@ public class UserInfoHelperImpl implements UserInfoHelper { | |||||
UserFullInfoDTO userFullInfo = getUserFullInfo(userId); | UserFullInfoDTO userFullInfo = getUserFullInfo(userId); | ||||
return userFullInfo.getEmpPosUnitCode(); | return userFullInfo.getEmpPosUnitCode(); | ||||
} | } | ||||
@Override | |||||
public List<UserInfo> 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<UserRole> userRoles = iUserRoleService.list(Wrappers.lambdaQuery(UserRole.class) | |||||
.eq(UserRole::getRoleId, regionRole.getId())); | |||||
if(CollUtil.isEmpty(userRoles)){ | |||||
return Collections.emptyList(); | |||||
} | |||||
List<Long> userIds = userRoles.stream().map(UserRole::getUserId) | |||||
.collect(Collectors.toList()); | |||||
return userInfoService.listByIds(userIds); | |||||
} | |||||
} | } |
@@ -4,8 +4,10 @@ import com.ningdatech.basic.model.PageVo; | |||||
import com.ningdatech.log.annotation.WebLog; | import com.ningdatech.log.annotation.WebLog; | ||||
import com.ningdatech.pmapi.gov.manage.GovProjectCollectionManage; | import com.ningdatech.pmapi.gov.manage.GovProjectCollectionManage; | ||||
import com.ningdatech.pmapi.gov.model.dto.GovBizProjectSaveDTO; | 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.GovBizProjectDetailVO; | ||||
import com.ningdatech.pmapi.gov.model.vo.GovBizProjectListVO; | 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.gov.model.vo.GovProjectDictionaryVO; | ||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | ||||
import com.ningdatech.pmapi.scheduler.task.SynProjectCollectionTask; | import com.ningdatech.pmapi.scheduler.task.SynProjectCollectionTask; | ||||
@@ -66,7 +68,7 @@ public class GovProjectCollectionController { | |||||
@GetMapping("/operation/detail/{projId}") | @GetMapping("/operation/detail/{projId}") | ||||
@ApiOperation("运维项目归集详情") | @ApiOperation("运维项目归集详情") | ||||
public GovBizProjectDetailVO operationDetail(@PathVariable String projId) { | |||||
public GovOperationProjectDetailVO operationDetail(@PathVariable String projId) { | |||||
return collectionManage.operationDetail(projId); | return collectionManage.operationDetail(projId); | ||||
} | } | ||||
@@ -80,7 +82,7 @@ public class GovProjectCollectionController { | |||||
@PostMapping("/operation/save") | @PostMapping("/operation/save") | ||||
@ApiOperation("运维项目归集保存") | @ApiOperation("运维项目归集保存") | ||||
@WebLog("运维项目归集保存") | @WebLog("运维项目归集保存") | ||||
public String operationSave(@Valid @RequestBody GovBizProjectSaveDTO saveDTO) { | |||||
public String operationSave(@Valid @RequestBody GovOperationProjectSaveDTO saveDTO) { | |||||
return collectionManage.operationSave(saveDTO,null); | return collectionManage.operationSave(saveDTO,null); | ||||
} | } | ||||
@@ -62,6 +62,17 @@ public class ProjectConvert { | |||||
return req; | 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<ProjectProcureReq> convertProcures(List<GovBizProjectProcureDTO> procures) { | private static List<ProjectProcureReq> convertProcures(List<GovBizProjectProcureDTO> procures) { | ||||
if(CollUtil.isEmpty(procures)){ | if(CollUtil.isEmpty(procures)){ | ||||
return Collections.emptyList(); | return Collections.emptyList(); | ||||
@@ -430,4 +441,10 @@ public class ProjectConvert { | |||||
req.setIsEffective(isEffective); | req.setIsEffective(isEffective); | ||||
return req; | return req; | ||||
} | } | ||||
public static ProjectBaseInfoReq convertBaseVo(GovOperationProjectBaseinfoVO baseinfo,String isEffective) { | |||||
ProjectBaseInfoReq req = BeanUtil.copyProperties(baseinfo,ProjectBaseInfoReq.class); | |||||
req.setIsEffective(isEffective); | |||||
return req; | |||||
} | |||||
} | } |
@@ -441,8 +441,8 @@ public class GovProjectCollectionManage { | |||||
return res; | return res; | ||||
} | } | ||||
public GovBizProjectDetailVO operationDetail(String projId) { | |||||
GovBizProjectDetailVO res = new GovBizProjectDetailVO(); | |||||
public GovOperationProjectDetailVO operationDetail(String projId) { | |||||
GovOperationProjectDetailVO res = new GovOperationProjectDetailVO(); | |||||
//1.先查 基本信息 | //1.先查 基本信息 | ||||
GovOperationProjectBaseinfo baseinfo = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) | GovOperationProjectBaseinfo baseinfo = operationProjectBaseinfoService.getOne(Wrappers.lambdaQuery(GovOperationProjectBaseinfo.class) | ||||
.eq(GovOperationProjectBaseinfo::getBaseProjId, projId) | .eq(GovOperationProjectBaseinfo::getBaseProjId, projId) | ||||
@@ -454,7 +454,7 @@ public class GovProjectCollectionManage { | |||||
} | } | ||||
res.setBaseProjId(baseinfo.getBaseProjId()); | res.setBaseProjId(baseinfo.getBaseProjId()); | ||||
res.setBaseProjName(baseinfo.getBaseProjName()); | res.setBaseProjName(baseinfo.getBaseProjName()); | ||||
res.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovBizProjectBaseinfoVO.class)); | |||||
res.setBaseinfo(BeanUtil.copyProperties(baseinfo, GovOperationProjectBaseinfoVO.class)); | |||||
//2.再查 申报信息 | //2.再查 申报信息 | ||||
GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class) | GovBizProjectApply apply = projectApplyService.getOne(Wrappers.lambdaQuery(GovBizProjectApply.class) | ||||
@@ -841,18 +841,18 @@ public class GovProjectCollectionManage { | |||||
* @param user | * @param user | ||||
* @return | * @return | ||||
*/ | */ | ||||
public String operationSave(GovBizProjectSaveDTO saveDTO, UserInfoDetails user) { | |||||
public String operationSave(GovOperationProjectSaveDTO saveDTO, UserInfoDetails user) { | |||||
if(Objects.isNull(user)){ | if(Objects.isNull(user)){ | ||||
user = LoginUserUtil.loginUserDetail(); | user = LoginUserUtil.loginUserDetail(); | ||||
} | } | ||||
GovBizProjectBaseinfoDTO base = saveDTO.getBaseinfo(); | |||||
GovOperationProjectBaseinfoDTO base = saveDTO.getBaseinfo(); | |||||
String baseProjId = saveDTO.getBaseProjId(); | String baseProjId = saveDTO.getBaseProjId(); | ||||
String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST; | String baseAreaCode = user.getRegionCode() + BizConst.NINE_AREA_CODE_LAST; | ||||
String baseProjName = base.getBaseProjName(); | String baseProjName = base.getBaseProjName(); | ||||
//1.保存基本信息 | //1.保存基本信息 | ||||
GovBizProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo(); | |||||
GovOperationProjectBaseinfoDTO baseinfo = saveDTO.getBaseinfo(); | |||||
baseinfo.setBaseProjId(baseProjId); | baseinfo.setBaseProjId(baseProjId); | ||||
baseinfo.setBaseProjName(baseProjName); | baseinfo.setBaseProjName(baseProjName); | ||||
baseinfo.setIsEffective(BizProjectContant.ProjectCollection.IS_EFFECTIVE); | 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<ProjectPushReq> formEntity = new HttpEntity<ProjectPushReq>(req, headers); | |||||
ResponseEntity<String> response = restTemplate.postForEntity(url, formEntity, String.class); | |||||
log.info("推送结果 {} :{}",vo.getBaseProjId(),response); | |||||
}catch (Exception e){ | |||||
log.info("推送失败,{}",e.getMessage()); | |||||
} | |||||
} | |||||
/** | /** | ||||
* 把项目置为无效 | * 把项目置为无效 | ||||
* @param baseinfo | * @param baseinfo | ||||
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 项目基本信息表 | |||||
* </p> | |||||
* | |||||
* @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; | |||||
} |
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 项目归集总VO | |||||
* </p> | |||||
* | |||||
* @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<GovBizProjectProcureDTO> procures; | |||||
} |
@@ -29,6 +29,9 @@ public class GovOperationProjectBaseinfo implements Serializable { | |||||
@TableId(type = IdType.AUTO) | @TableId(type = IdType.AUTO) | ||||
private Long id; | private Long id; | ||||
@ApiModelProperty("是否推送 省局归集") | |||||
private Boolean push; | |||||
@ApiModelProperty("项目编号") | @ApiModelProperty("项目编号") | ||||
private String baseProjId; | private String baseProjId; | ||||
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 项目基本信息表 | |||||
* </p> | |||||
* | |||||
* @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; | |||||
} |
@@ -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; | |||||
/** | |||||
* <p> | |||||
* 运维项目总详情VO | |||||
* </p> | |||||
* | |||||
* @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<GovBizProjectProcureVO> procures; | |||||
} |
@@ -5,9 +5,7 @@ import com.ningdatech.basic.function.VUtils; | |||||
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.gov.contants.BizProjectContant; | 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.GovBizProjectBaseinfo; | ||||
import com.ningdatech.pmapi.gov.model.entity.GovOperationProjectBaseinfo; | import com.ningdatech.pmapi.gov.model.entity.GovOperationProjectBaseinfo; | ||||
import com.ningdatech.pmapi.gov.service.IGovBizProjectBaseinfoService; | import com.ningdatech.pmapi.gov.service.IGovBizProjectBaseinfoService; | ||||
@@ -169,4 +167,51 @@ public class GenerateProjectCodeUtil { | |||||
// 生成20位的项目编号 | // 生成20位的项目编号 | ||||
return currentCode + String.format(ProjectCodeContant.SHUZI_5, max); | 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); | |||||
} | |||||
} | } |
@@ -8,18 +8,19 @@ import com.alibaba.fastjson.JSONObject; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.ningdatech.pmapi.common.constant.BizConst; | import com.ningdatech.pmapi.common.constant.BizConst; | ||||
import com.ningdatech.pmapi.common.enumeration.CommonEnum; | 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.Contract; | ||||
import com.ningdatech.pmapi.projectdeclared.model.entity.Operation; | import com.ningdatech.pmapi.projectdeclared.model.entity.Operation; | ||||
import com.ningdatech.pmapi.projectdeclared.service.IContractService; | import com.ningdatech.pmapi.projectdeclared.service.IContractService; | ||||
import com.ningdatech.pmapi.projectdeclared.service.IOperationService; | 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.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.projectlib.service.IProjectService; | ||||
import com.ningdatech.pmapi.sys.manage.EarlyWarningManage; | import com.ningdatech.pmapi.sys.manage.EarlyWarningManage; | ||||
import com.ningdatech.pmapi.user.entity.UserInfo; | import com.ningdatech.pmapi.user.entity.UserInfo; | ||||
import com.ningdatech.pmapi.user.entity.enumeration.RoleEnum; | |||||
import com.ningdatech.pmapi.user.service.IUserInfoService; | import com.ningdatech.pmapi.user.service.IUserInfoService; | ||||
import com.wflow.bean.entity.WflowEarlyWarning; | import com.wflow.bean.entity.WflowEarlyWarning; | ||||
import com.wflow.enums.WarningRuleTypeEnum; | import com.wflow.enums.WarningRuleTypeEnum; | ||||
@@ -63,6 +64,10 @@ public class EarlyWarningInstanceNotStartTask { | |||||
private final IUserInfoService userInfoService; | private final IUserInfoService userInfoService; | ||||
private final IProjectRenewalFundDeclarationService renewalFundDeclarationService; | |||||
private final UserInfoHelper userInfoHelper; | |||||
@Scheduled(cron = "0 0/2 * * * ?") | @Scheduled(cron = "0 0/2 * * * ?") | ||||
public void doEarlyWarningDeclared() throws UnknownHostException { | public void doEarlyWarningDeclared() throws UnknownHostException { | ||||
if (!HOST_NAME.equals(InetAddress.getLocalHost().getHostName())) { | if (!HOST_NAME.equals(InetAddress.getLocalHost().getHostName())) { | ||||
@@ -331,4 +336,97 @@ public class EarlyWarningInstanceNotStartTask { | |||||
stopWatch.stop(); | stopWatch.stop(); | ||||
log.info("=========== 预警实施超时任务结束 耗时{}s", stopWatch.getTotalTimeSeconds()); | 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<WflowEarlyWarning> 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<ProjectRenewalFundDeclaration> needNextProjects = renewalFundDeclarationService.list(Wrappers.lambdaQuery(ProjectRenewalFundDeclaration.class) | |||||
.eq(ProjectRenewalFundDeclaration::getRegionCode, areaCode) | |||||
.eq(ProjectRenewalFundDeclaration::getDeleted,Boolean.FALSE) | |||||
.eq(ProjectRenewalFundDeclaration::getApprovalStatus, ProjectRenewalApprovalStatusEnum.PENDING.getCode())); | |||||
//需要发通知的项目 | |||||
List<ProjectRenewalFundDeclaration> 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<UserInfo> 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()); | |||||
} | |||||
} | } |
@@ -9,6 +9,8 @@ import com.ningdatech.pmapi.gov.manage.GovProjectCollectionManage; | |||||
import com.ningdatech.pmapi.gov.model.entity.*; | import com.ningdatech.pmapi.gov.model.entity.*; | ||||
import com.ningdatech.pmapi.gov.model.vo.GovBizProjectDetailVO; | import com.ningdatech.pmapi.gov.model.vo.GovBizProjectDetailVO; | ||||
import com.ningdatech.pmapi.gov.model.vo.GovBizProjectListVO; | 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.gov.service.*; | ||||
import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | import com.ningdatech.pmapi.projectlib.model.req.ProjectListReq; | ||||
import lombok.RequiredArgsConstructor; | import lombok.RequiredArgsConstructor; | ||||
@@ -106,7 +108,12 @@ public class SynProjectCollectionTask { | |||||
PageVo<GovBizProjectListVO> operationList = collectionManage.operationList(req); | PageVo<GovBizProjectListVO> operationList = collectionManage.operationList(req); | ||||
log.info("operation list size :{}",operationList.getTotal()); | log.info("operation list size :{}",operationList.getTotal()); | ||||
for(GovBizProjectListVO vo : operationList.getRecords()){ | 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); | collectionManage.pushProjectVo(operationDetail); | ||||
} | } | ||||
@@ -109,7 +109,7 @@ public class ProjectRemoveTest extends AppTests { | |||||
@Test | @Test | ||||
public void test(){ | public void test(){ | ||||
List<String> projectCodes = Lists.newArrayList("33112600020240100001"); | |||||
List<String> projectCodes = Lists.newArrayList("33112600020230100002"); | |||||
for(String projectCode : projectCodes){ | for(String projectCode : projectCodes){ | ||||
//项目 | //项目 | ||||