@@ -218,7 +218,7 @@ public class ProjectDeclareStateMachineBuilderImpl implements ProjectDeclareStat | |||||
.event(ProjectStatusChangeEvent.DECLARED_RECORD_PASS).and() | .event(ProjectStatusChangeEvent.DECLARED_RECORD_PASS).and() | ||||
.withExternal() | .withExternal() | ||||
.source(ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING) | .source(ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING) | ||||
.source(ProjectStatusEnum.DECLARED_APPROVED_RECORD_FAILED) | |||||
.target(ProjectStatusEnum.DECLARED_APPROVED_RECORD_FAILED) | |||||
.event(ProjectStatusChangeEvent.DECLARED_RECORD_FAILED).and() | .event(ProjectStatusChangeEvent.DECLARED_RECORD_FAILED).and() | ||||
// 待立项批复批复,从待立项批复到待采购 | // 待立项批复批复,从待立项批复到待采购 | ||||
.withExternal() | .withExternal() | ||||
@@ -122,7 +122,7 @@ public enum ProjectStatusChangeEvent { | |||||
/** | /** | ||||
* 立项备案不通过 | * 立项备案不通过 | ||||
*/ | */ | ||||
DECLARED_RECORD_FAILED(null, ProjectStatusEnum.DECLARED_APPROVED_RECORD_FAILED.getCode(), null), | |||||
DECLARED_RECORD_FAILED(null, ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING.getCode(), null), | |||||
//================================================================================================================== | //================================================================================================================== | ||||
@@ -16,11 +16,11 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||||
import com.google.common.collect.Lists; | import com.google.common.collect.Lists; | ||||
import com.hz.pm.api.common.enumeration.CommonEnum; | import com.hz.pm.api.common.enumeration.CommonEnum; | ||||
import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; | import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; | ||||
import com.hz.pm.api.common.helper.RegionCacheHelper; | |||||
import com.hz.pm.api.common.helper.UserInfoHelper; | import com.hz.pm.api.common.helper.UserInfoHelper; | ||||
import com.hz.pm.api.common.model.constant.BizConst; | import com.hz.pm.api.common.model.constant.BizConst; | ||||
import com.hz.pm.api.common.util.ExcelDownUtil; | import com.hz.pm.api.common.util.ExcelDownUtil; | ||||
import com.hz.pm.api.common.util.ExcelExportStyle; | import com.hz.pm.api.common.util.ExcelExportStyle; | ||||
import com.hz.pm.api.external.model.enumeration.MhUnitTypeEnum; | |||||
import com.hz.pm.api.gov.manage.GovProjectCollectionManage; | import com.hz.pm.api.gov.manage.GovProjectCollectionManage; | ||||
import com.hz.pm.api.irs.manage.ProjectIrsManage; | import com.hz.pm.api.irs.manage.ProjectIrsManage; | ||||
import com.hz.pm.api.projectdeclared.contants.DeclaredProjectConst; | import com.hz.pm.api.projectdeclared.contants.DeclaredProjectConst; | ||||
@@ -44,6 +44,8 @@ import com.hz.pm.api.projectlib.service.IProjectService; | |||||
import com.hz.pm.api.staging.enums.MsgTypeEnum; | import com.hz.pm.api.staging.enums.MsgTypeEnum; | ||||
import com.hz.pm.api.sys.manage.NoticeManage; | import com.hz.pm.api.sys.manage.NoticeManage; | ||||
import com.hz.pm.api.todocenter.constant.WorkNoticeConst; | import com.hz.pm.api.todocenter.constant.WorkNoticeConst; | ||||
import com.hz.pm.api.user.helper.MhUnitCache; | |||||
import com.hz.pm.api.user.model.dto.UnitDTO; | |||||
import com.hz.pm.api.user.security.model.UserFullInfoDTO; | import com.hz.pm.api.user.security.model.UserFullInfoDTO; | ||||
import com.hz.pm.api.user.security.model.UserInfoDetails; | import com.hz.pm.api.user.security.model.UserInfoDetails; | ||||
import com.hz.pm.api.user.util.LoginUserUtil; | import com.hz.pm.api.user.util.LoginUserUtil; | ||||
@@ -101,7 +103,7 @@ public class DeclaredProjectManage { | |||||
private final UserInfoHelper userInfoHelper; | private final UserInfoHelper userInfoHelper; | ||||
private final RegionCacheHelper regionCacheHelper; | |||||
private final MhUnitCache mhUnitCache; | |||||
private final ProjectIrsManage projectIrsManage; | private final ProjectIrsManage projectIrsManage; | ||||
@@ -264,28 +266,29 @@ public class DeclaredProjectManage { | |||||
return instanceId; | return instanceId; | ||||
} | } | ||||
public PageVo<ProjectDraftVO> pageDraft(DeclaredProjectListParamDTO params, Integer draftType) { | |||||
public PageVo<ProjectDraftVO> pageDraft(DeclaredProjectListParamDTO req, Integer draftType) { | |||||
Long userId = LoginUserUtil.getUserId(); | Long userId = LoginUserUtil.getUserId(); | ||||
Page<ProjectDraft> page = params.page(); | |||||
Page<ProjectDraft> page = req.page(); | |||||
LambdaQueryWrapper<ProjectDraft> wrapper = Wrappers.lambdaQuery(ProjectDraft.class) | LambdaQueryWrapper<ProjectDraft> wrapper = Wrappers.lambdaQuery(ProjectDraft.class) | ||||
.eq(ProjectDraft::getUserId, userId) | .eq(ProjectDraft::getUserId, userId) | ||||
.eq(ProjectDraft::getDraftType, draftType) | .eq(ProjectDraft::getDraftType, draftType) | ||||
.ge(Objects.nonNull(params.getStartTime()), ProjectDraft::getCreateOn, params.getStartTime()) | |||||
.le(Objects.nonNull(params.getEndTime()), ProjectDraft::getCreateOn, params.getEndTime()) | |||||
.eq(Objects.nonNull(params.getProjectType()), ProjectDraft::getProjectType, params.getProjectType()) | |||||
.eq(Objects.nonNull(params.getProjectYear()), ProjectDraft::getProjectYear, params.getProjectYear()) | |||||
.eq(Objects.nonNull(params.getProjectStage()), ProjectDraft::getStage, params.getProjectStage()) | |||||
.eq(Objects.nonNull(params.getProjectStatus()), ProjectDraft::getStatus, params.getProjectStatus()) | |||||
.like(StringUtils.isNotBlank(params.getProjectName()), ProjectDraft::getProjectName, params.getProjectName()) | |||||
.ge(Objects.nonNull(req.getStartTime()), ProjectDraft::getCreateOn, req.getStartTime()) | |||||
.le(Objects.nonNull(req.getEndTime()), ProjectDraft::getCreateOn, req.getEndTime()) | |||||
.eq(Objects.nonNull(req.getProjectType()), ProjectDraft::getProjectType, req.getProjectType()) | |||||
.eq(Objects.nonNull(req.getProjectYear()), ProjectDraft::getProjectYear, req.getProjectYear()) | |||||
.eq(Objects.nonNull(req.getProjectStage()), ProjectDraft::getStage, req.getProjectStage()) | |||||
.eq(Objects.nonNull(req.getProjectStatus()), ProjectDraft::getStatus, req.getProjectStatus()) | |||||
.eq(req.getUnitStrip() != null, ProjectDraft::getUnitStrip, req.getUnitStrip()) | |||||
.like(StringUtils.isNotBlank(req.getProjectName()), ProjectDraft::getProjectName, req.getProjectName()) | |||||
.orderByDesc(ProjectDraft::getUpdateOn); | .orderByDesc(ProjectDraft::getUpdateOn); | ||||
projectDraftService.page(page, wrapper); | projectDraftService.page(page, wrapper); | ||||
if (CollUtil.isEmpty(page.getRecords())) { | if (CollUtil.isEmpty(page.getRecords())) { | ||||
return PageVo.empty(); | return PageVo.empty(); | ||||
} | } | ||||
List<ProjectDraftVO> res = page.getRecords().stream().map(record -> { | |||||
List<ProjectDraftVO> res = page.getRecords().stream().map(draft -> { | |||||
ProjectDraftVO vo = new ProjectDraftVO(); | ProjectDraftVO vo = new ProjectDraftVO(); | ||||
BeanUtils.copyProperties(record, vo); | |||||
vo.setBizDomain(Objects.nonNull(record.getBizDomain()) ? String.valueOf(record.getBizDomain()) : StringUtils.EMPTY); | |||||
BeanUtils.copyProperties(draft, vo); | |||||
vo.setBizDomain(Objects.nonNull(draft.getBizDomain()) ? String.valueOf(draft.getBizDomain()) : StringUtils.EMPTY); | |||||
return vo; | return vo; | ||||
}).collect(Collectors.toList()); | }).collect(Collectors.toList()); | ||||
return PageVo.of(res, page.getTotal()); | return PageVo.of(res, page.getTotal()); | ||||
@@ -330,7 +333,10 @@ public class DeclaredProjectManage { | |||||
draft.setUserId(user.getUserIdStr()); | draft.setUserId(user.getUserIdStr()); | ||||
draft.setBuildOrgCode(user.getMhUnitIdStr()); | draft.setBuildOrgCode(user.getMhUnitIdStr()); | ||||
draft.setBuildOrgName(user.getMhUnitName()); | draft.setBuildOrgName(user.getMhUnitName()); | ||||
UnitDTO unit = mhUnitCache.getById(user.getMhUnitId()); | |||||
Assert.notNull(unit, "申报单位不存在"); | |||||
MhUnitTypeEnum unitType = Objects.requireNonNull(unit.getType(), "申报单位类型错误"); | |||||
draft.setUnitStrip(unitType.getStrip().getCode()); | |||||
if (CollUtil.isNotEmpty(projectInfo.getDynamicForm())) { | if (CollUtil.isNotEmpty(projectInfo.getDynamicForm())) { | ||||
draft.setDynamicForm(JSON.toJSONString(projectInfo.getDynamicForm())); | draft.setDynamicForm(JSON.toJSONString(projectInfo.getDynamicForm())); | ||||
} | } | ||||
@@ -41,4 +41,8 @@ public class DeclaredProjectListParamDTO extends PagePo { | |||||
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") | ||||
@ApiModelProperty("结束时间") | @ApiModelProperty("结束时间") | ||||
private String endTime; | private String endTime; | ||||
@ApiModelProperty("申报单位") | |||||
private Integer unitStrip; | |||||
} | } |
@@ -21,7 +21,7 @@ import java.util.Map; | |||||
@Data | @Data | ||||
@NoArgsConstructor | @NoArgsConstructor | ||||
@AllArgsConstructor | @AllArgsConstructor | ||||
public class DefaultDeclaredDTO implements Serializable { | |||||
public class DefaultDeclaredDTO { | |||||
@NotNull | @NotNull | ||||
@ApiModelProperty("项目信息") | @ApiModelProperty("项目信息") | ||||
@@ -361,4 +361,10 @@ public class ProjectDraft implements Serializable { | |||||
private String govSystemReplaceInfos; | private String govSystemReplaceInfos; | ||||
@ApiModelProperty("信产项目ID") | |||||
private Long mhProjectId; | |||||
@ApiModelProperty("申报单位领域") | |||||
private Integer unitStrip; | |||||
} | } |
@@ -384,4 +384,10 @@ public class ProjectDraftVO { | |||||
@ApiModelProperty("政务系统改造情况") | @ApiModelProperty("政务系统改造情况") | ||||
private List<GovSystemReplaceInfoDTO> systemReplaceInfos; | private List<GovSystemReplaceInfoDTO> systemReplaceInfos; | ||||
@ApiModelProperty("信产项目ID") | |||||
private Long mhProjectId; | |||||
@ApiModelProperty("申报单位领域") | |||||
private Integer unitStrip; | |||||
} | } |
@@ -5,12 +5,15 @@ import cn.hutool.core.util.StrUtil; | |||||
import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
import com.alibaba.fastjson.TypeReference; | import com.alibaba.fastjson.TypeReference; | ||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; | ||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; | |||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | import com.baomidou.mybatisplus.core.toolkit.Wrappers; | ||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | ||||
import com.hz.pm.api.common.enumeration.CommonEnum; | import com.hz.pm.api.common.enumeration.CommonEnum; | ||||
import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; | import com.hz.pm.api.common.enumeration.ProjectProcessStageEnum; | ||||
import com.hz.pm.api.common.model.constant.BizConst; | import com.hz.pm.api.common.model.constant.BizConst; | ||||
import com.hz.pm.api.common.statemachine.event.ProjectStatusChangeEvent; | |||||
import com.hz.pm.api.external.model.enumeration.MhUnitStripEnum; | import com.hz.pm.api.external.model.enumeration.MhUnitStripEnum; | ||||
import com.hz.pm.api.external.model.enumeration.MhUnitTypeEnum; | |||||
import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage; | import com.hz.pm.api.projectdeclared.manage.DefaultDeclaredProjectManage; | ||||
import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; | import com.hz.pm.api.projectdeclared.model.dto.DefaultDeclaredDTO; | ||||
import com.hz.pm.api.projectdeclared.model.dto.ProjectConditionDTO; | import com.hz.pm.api.projectdeclared.model.dto.ProjectConditionDTO; | ||||
@@ -19,12 +22,14 @@ import com.hz.pm.api.projectlib.model.dto.ProjectDTO; | |||||
import com.hz.pm.api.projectlib.model.entity.MhProject; | import com.hz.pm.api.projectlib.model.entity.MhProject; | ||||
import com.hz.pm.api.projectlib.model.entity.MhProjectSchemaTargetData; | import com.hz.pm.api.projectlib.model.entity.MhProjectSchemaTargetData; | ||||
import com.hz.pm.api.projectlib.model.entity.Project; | import com.hz.pm.api.projectlib.model.entity.Project; | ||||
import com.hz.pm.api.projectlib.model.entity.ProjectStatusChange; | |||||
import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum; | import com.hz.pm.api.projectlib.model.enumeration.ProjectStatusEnum; | ||||
import com.hz.pm.api.projectlib.model.req.DeclaredProjectListReq; | import com.hz.pm.api.projectlib.model.req.DeclaredProjectListReq; | ||||
import com.hz.pm.api.projectlib.model.vo.DeclaredProjectListVO; | import com.hz.pm.api.projectlib.model.vo.DeclaredProjectListVO; | ||||
import com.hz.pm.api.projectlib.model.vo.MhProjectBaseInfoVO; | import com.hz.pm.api.projectlib.model.vo.MhProjectBaseInfoVO; | ||||
import com.hz.pm.api.projectlib.service.IMhProjectSchemaTargetDataService; | import com.hz.pm.api.projectlib.service.IMhProjectSchemaTargetDataService; | ||||
import com.hz.pm.api.projectlib.service.IMhProjectService; | import com.hz.pm.api.projectlib.service.IMhProjectService; | ||||
import com.hz.pm.api.projectlib.service.INdProjectStatusChangeService; | |||||
import com.hz.pm.api.projectlib.service.IProjectService; | import com.hz.pm.api.projectlib.service.IProjectService; | ||||
import com.hz.pm.api.staging.enums.MsgTypeEnum; | import com.hz.pm.api.staging.enums.MsgTypeEnum; | ||||
import com.hz.pm.api.sys.manage.NoticeManage; | import com.hz.pm.api.sys.manage.NoticeManage; | ||||
@@ -48,10 +53,8 @@ import org.springframework.beans.BeanUtils; | |||||
import org.springframework.stereotype.Component; | import org.springframework.stereotype.Component; | ||||
import org.springframework.transaction.annotation.Transactional; | import org.springframework.transaction.annotation.Transactional; | ||||
import java.util.Collections; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.Objects; | |||||
import java.time.LocalDateTime; | |||||
import java.util.*; | |||||
import java.util.stream.Collectors; | import java.util.stream.Collectors; | ||||
/** | /** | ||||
@@ -68,7 +71,7 @@ import java.util.stream.Collectors; | |||||
public class DeclaredRecordManage { | public class DeclaredRecordManage { | ||||
private final IMhProjectService mhProjectService; | private final IMhProjectService mhProjectService; | ||||
private final IMhProjectSchemaTargetDataService mhProjectSchemaTargetDataService; | |||||
private final IMhProjectSchemaTargetDataService schemaTargetDataService; | |||||
private final IProjectService projectService; | private final IProjectService projectService; | ||||
private final MhUnitCache mhUnitCache; | private final MhUnitCache mhUnitCache; | ||||
private final NoticeManage noticeManage; | private final NoticeManage noticeManage; | ||||
@@ -77,6 +80,7 @@ public class DeclaredRecordManage { | |||||
private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; | private final DefaultDeclaredProjectManage defaultDeclaredProjectManage; | ||||
private final ProcessInstanceService processInstanceService; | private final ProcessInstanceService processInstanceService; | ||||
private final ProjectLibManage projectLibManage; | private final ProjectLibManage projectLibManage; | ||||
private final INdProjectStatusChangeService projectStatusChangeService; | |||||
private LambdaQueryWrapper<MhProject> buildQuery(DeclaredProjectListReq req) { | private LambdaQueryWrapper<MhProject> buildQuery(DeclaredProjectListReq req) { | ||||
LambdaQueryWrapper<MhProject> query = Wrappers.lambdaQuery(MhProject.class) | LambdaQueryWrapper<MhProject> query = Wrappers.lambdaQuery(MhProject.class) | ||||
@@ -118,11 +122,12 @@ public class DeclaredRecordManage { | |||||
item.setMhProjectId(w.getId()); | item.setMhProjectId(w.getId()); | ||||
Project project = projectMap.get(w.getProjectCode()); | Project project = projectMap.get(w.getProjectCode()); | ||||
if (project == null) { | if (project == null) { | ||||
item.setStatus(null); | |||||
item.setStage(null); | |||||
item.setStatus(ProjectStatusEnum.DECLARED_APPROVED_TO_BE_RECORD.getCode()); | |||||
item.setStage(ProjectStatusEnum.TO_BE_APPROVED.getCode()); | |||||
} else { | } else { | ||||
item.setStatus(project.getStatus()); | item.setStatus(project.getStatus()); | ||||
item.setStage(project.getStage()); | item.setStage(project.getStage()); | ||||
item.setProjectId(project.getId()); | |||||
} | } | ||||
item.setUnitStrip(w.getUnitStrip()); | item.setUnitStrip(w.getUnitStrip()); | ||||
item.setUnitStripName(MhUnitStripEnum.getVal(w.getUnitStrip())); | item.setUnitStripName(MhUnitStripEnum.getVal(w.getUnitStrip())); | ||||
@@ -148,7 +153,12 @@ public class DeclaredRecordManage { | |||||
detail.setDeclaredUnitId(mhProject.getUnitId()); | detail.setDeclaredUnitId(mhProject.getUnitId()); | ||||
detail.setTotalInvestAmount(mhProject.getTotalMoney()); | detail.setTotalInvestAmount(mhProject.getTotalMoney()); | ||||
detail.setReviewInvestAmount(mhProject.getMoney()); | detail.setReviewInvestAmount(mhProject.getMoney()); | ||||
MhProjectSchemaTargetData schemaTargetData = mhProjectSchemaTargetDataService.getByMhProjectId(mhProjectId); | |||||
detail.setProjectCode(mhProject.getProjectCode()); | |||||
if (StrUtil.isNotBlank(detail.getProjectCode())) { | |||||
Optional<Long> projectId = projectService.getNewProjectId(detail.getProjectCode()); | |||||
projectId.ifPresent(detail::setProjectId); | |||||
} | |||||
MhProjectSchemaTargetData schemaTargetData = schemaTargetDataService.getByMhProjectId(mhProjectId); | |||||
if (schemaTargetData != null) { | if (schemaTargetData != null) { | ||||
detail.setTotalInvestBudgetAmount(schemaTargetData.getMoney()); | detail.setTotalInvestBudgetAmount(schemaTargetData.getMoney()); | ||||
} | } | ||||
@@ -160,9 +170,10 @@ public class DeclaredRecordManage { | |||||
} | } | ||||
@Transactional(rollbackFor = Exception.class) | @Transactional(rollbackFor = Exception.class) | ||||
public void startDeclaredRecord(DefaultDeclaredDTO req) { | |||||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | |||||
public synchronized void startDeclaredRecord(DefaultDeclaredDTO req) { | |||||
ProjectDTO projectInfo = req.getProjectInfo(); | ProjectDTO projectInfo = req.getProjectInfo(); | ||||
Assert.notNull(projectInfo.getMhProjectId(), "信产项目ID不能为空"); | |||||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | |||||
projectInfo.setBuildOrgCode(user.getMhUnitIdStr()); | projectInfo.setBuildOrgCode(user.getMhUnitIdStr()); | ||||
projectInfo.setBuildOrgName(user.getMhUnitName()); | projectInfo.setBuildOrgName(user.getMhUnitName()); | ||||
@@ -211,25 +222,32 @@ public class DeclaredRecordManage { | |||||
BeanUtils.copyProperties(projectInfo, project); | BeanUtils.copyProperties(projectInfo, project); | ||||
Map<String, OrgInfoDTO> orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); | Map<String, OrgInfoDTO> orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); | ||||
String instanceId = processInstanceService.startProcessLs(model, params, orgModelMap); | String instanceId = processInstanceService.startProcessLs(model, params, orgModelMap); | ||||
log.info("申报项目成功 【{}】", instanceId); | |||||
log.info("立项备案成功 【{}】", instanceId); | |||||
//如果是重新提交的话 判断下 项目是否存在 | |||||
//保存项目相关 | |||||
Project buildProject = projectLibManage.saveProjectInDeclared(projectInfo, instanceId, user.getUserId(), | |||||
// 如果是重新提交的话 判断下 项目是否存在 | |||||
// 保存项目相关 | |||||
Project newProj = projectLibManage.saveProjectInDeclared(projectInfo, instanceId, user.getUserId(), | |||||
ProjectStatusEnum.NOT_APPROVED, ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING, | ProjectStatusEnum.NOT_APPROVED, ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING, | ||||
ProjectProcessStageEnum.PROJECT_RECORD_APPROVAL_PROCESS); | ProjectProcessStageEnum.PROJECT_RECORD_APPROVAL_PROCESS); | ||||
// 保存状态变更 | |||||
saveProjectStatusChangeLog(ProjectStatusEnum.DECLARED_APPROVED_TO_BE_RECORD, | |||||
newProj, ProjectStatusChangeEvent.DECLARED_RECORD_SUBMIT); | |||||
if (Objects.nonNull(projectInfo.getDraftId())) { | if (Objects.nonNull(projectInfo.getDraftId())) { | ||||
//如果是草稿箱提交 删除对应的草稿箱 | //如果是草稿箱提交 删除对应的草稿箱 | ||||
projectDraftService.removeById(projectInfo.getDraftId()); | projectDraftService.removeById(projectInfo.getDraftId()); | ||||
} | } | ||||
// 申报项目完成后 保存项目编码 | |||||
LambdaUpdateWrapper<MhProject> update = Wrappers.lambdaUpdate(MhProject.class) | |||||
.set(MhProject::getProjectCode, newProj.getProjectCode()) | |||||
.eq(MhProject::getId, projectInfo.getMhProjectId()); | |||||
mhProjectService.update(update); | |||||
//发送给第一个审批人消息 | //发送给第一个审批人消息 | ||||
noticeManage.sendFirstUser(buildProject, model.getFormName(), instanceId, | |||||
noticeManage.sendFirstUser(newProj, model.getFormName(), instanceId, | |||||
WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); | WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); | ||||
} | } | ||||
@Transactional(rollbackFor = Exception.class) | @Transactional(rollbackFor = Exception.class) | ||||
public String restartDeclaredRecord(DefaultDeclaredDTO req) { | |||||
public synchronized String restartDeclaredRecord(DefaultDeclaredDTO req) { | |||||
UserInfoDetails user = LoginUserUtil.loginUserDetail(); | UserInfoDetails user = LoginUserUtil.loginUserDetail(); | ||||
ProjectDTO reqProj = req.getProjectInfo(); | ProjectDTO reqProj = req.getProjectInfo(); | ||||
Assert.notNull(reqProj.getId(), "提交失败,缺少项目ID!"); | Assert.notNull(reqProj.getId(), "提交失败,缺少项目ID!"); | ||||
@@ -245,7 +263,10 @@ public class DeclaredRecordManage { | |||||
reqProj.setProjectCode(oldProj.getProjectCode()); | reqProj.setProjectCode(oldProj.getProjectCode()); | ||||
defaultDeclaredProjectManage.checkDuplication(reqProj); | defaultDeclaredProjectManage.checkDuplication(reqProj); | ||||
} | } | ||||
UnitDTO unit = mhUnitCache.getById(user.getMhUnitId()); | |||||
Assert.notNull(unit, "申报单位不存在"); | |||||
MhUnitTypeEnum unitType = Objects.requireNonNull(unit.getType(), "申报单位类型错误"); | |||||
reqProj.setUnitStrip(unitType.getStrip().getCode()); | |||||
// 写死 是否有主管单位 | // 写死 是否有主管单位 | ||||
oldProj.setIsHigherSuperOrg(CommonEnum.YES.getCode()); | oldProj.setIsHigherSuperOrg(CommonEnum.YES.getCode()); | ||||
oldProj.setIsSuperOrg(CommonEnum.YES.getCode()); | oldProj.setIsSuperOrg(CommonEnum.YES.getCode()); | ||||
@@ -284,14 +305,16 @@ public class DeclaredRecordManage { | |||||
BeanUtils.copyProperties(reqProj, project); | BeanUtils.copyProperties(reqProj, project); | ||||
Map<String, OrgInfoDTO> orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); | Map<String, OrgInfoDTO> orgModelMap = defaultDeclaredProjectManage.buildOrgModelMap(user.getUserId(), project); | ||||
String instId = processInstanceService.startProcessLs(model, params, orgModelMap); | String instId = processInstanceService.startProcessLs(model, params, orgModelMap); | ||||
log.info("立项备案重新提交 【{}】", instId); | |||||
log.info("立项备案成功 【{}】", instId); | |||||
//保存项目相关 | //保存项目相关 | ||||
Project newProj = projectLibManage.saveProjectInDeclared(reqProj, instId, user.getUserId(), | Project newProj = projectLibManage.saveProjectInDeclared(reqProj, instId, user.getUserId(), | ||||
ProjectStatusEnum.NOT_APPROVED, | ProjectStatusEnum.NOT_APPROVED, | ||||
ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING, | ProjectStatusEnum.DECLARED_APPROVED_RECORD_AUDITING, | ||||
processStageEnum); | processStageEnum); | ||||
// 保存状态变更 | |||||
saveProjectStatusChangeLog(ProjectStatusEnum.DECLARED_APPROVED_RECORD_FAILED, | |||||
newProj, ProjectStatusChangeEvent.DECLARED_RECORD_RESUBMIT); | |||||
//发送给第一个审批人消息 | //发送给第一个审批人消息 | ||||
noticeManage.sendFirstUser(newProj, model.getFormName(), instId, | noticeManage.sendFirstUser(newProj, model.getFormName(), instId, | ||||
WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); | WorkNoticeConst.PASS_MSG_TEMPLATE, MsgTypeEnum.PROJECT_REVIEW); | ||||
@@ -299,5 +322,16 @@ public class DeclaredRecordManage { | |||||
return instId; | return instId; | ||||
} | } | ||||
private void saveProjectStatusChangeLog(ProjectStatusEnum beforeStatus, Project project, ProjectStatusChangeEvent event) { | |||||
ProjectStatusChange change = new ProjectStatusChange(); | |||||
change.setAfterStatus(project.getStatus()); | |||||
change.setProjectId(project.getId()); | |||||
change.setBeforeStatus(beforeStatus.getCode()); | |||||
change.setEvent(event.name()); | |||||
change.setCreateOn(LocalDateTime.now()); | |||||
change.setProjectCode(project.getProjectCode()); | |||||
projectStatusChangeService.save(change); | |||||
} | |||||
} | } |
@@ -365,4 +365,10 @@ public class ProjectDTO { | |||||
@ApiModelProperty("政务信息系统替代情况") | @ApiModelProperty("政务信息系统替代情况") | ||||
private List<GovSystemReplaceInfoDTO> systemReplaceInfos; | private List<GovSystemReplaceInfoDTO> systemReplaceInfos; | ||||
@ApiModelProperty("信产项目ID") | |||||
private Long mhProjectId; | |||||
@ApiModelProperty("申报单位领域") | |||||
private Integer unitStrip; | |||||
} | } |
@@ -546,4 +546,7 @@ public class Project implements Serializable { | |||||
@ApiModelProperty("立项依据证明材料") | @ApiModelProperty("立项依据证明材料") | ||||
private String baseProjBasisFile; | private String baseProjBasisFile; | ||||
@ApiModelProperty("申报单位领域") | |||||
private Integer unitStrip; | |||||
} | } |
@@ -47,4 +47,7 @@ public class DeclaredProjectListVO { | |||||
@ApiModelProperty("ID") | @ApiModelProperty("ID") | ||||
private Long mhProjectId; | private Long mhProjectId; | ||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
} | } |
@@ -7,7 +7,7 @@ import java.math.BigDecimal; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
* MhProjectDetailVO | |||||
* 信产立项备案 | |||||
* </p> | * </p> | ||||
* | * | ||||
* @author WendyYang | * @author WendyYang | ||||
@@ -40,4 +40,10 @@ public class MhProjectBaseInfoVO { | |||||
@ApiModelProperty("id") | @ApiModelProperty("id") | ||||
private Long mhProjectId; | private Long mhProjectId; | ||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
@ApiModelProperty("项目编码") | |||||
private String projectCode; | |||||
} | } |
@@ -28,11 +28,22 @@ public interface IProjectService extends IService<Project> { | |||||
default Optional<String> getProjectCode(Long projectId) { | default Optional<String> getProjectCode(Long projectId) { | ||||
LambdaQueryWrapper<Project> query = Wrappers.lambdaQuery(Project.class) | LambdaQueryWrapper<Project> query = Wrappers.lambdaQuery(Project.class) | ||||
.select(Project::getProjectCode) | .select(Project::getProjectCode) | ||||
.eq(Project::getId, projectId) | |||||
.last(BizConst.LIMIT_1); | .last(BizConst.LIMIT_1); | ||||
return Optional.ofNullable(getOne(query)) | return Optional.ofNullable(getOne(query)) | ||||
.flatMap(w -> Optional.of(w.getProjectCode())); | .flatMap(w -> Optional.of(w.getProjectCode())); | ||||
} | } | ||||
default Optional<Long> getNewProjectId(String projectCode) { | |||||
LambdaQueryWrapper<Project> query = Wrappers.lambdaQuery(Project.class) | |||||
.select(Project::getId) | |||||
.eq(Project::getProjectCode, projectCode) | |||||
.orderByDesc(Project::getVersion) | |||||
.last(BizConst.LIMIT_1); | |||||
return Optional.ofNullable(getOne(query)) | |||||
.flatMap(w -> Optional.of(w.getId())); | |||||
} | |||||
List<Long> allVersionProjectIds(String projectCode); | List<Long> allVersionProjectIds(String projectCode); | ||||
List<Long> allVersionProjectIds(Long projectId); | List<Long> allVersionProjectIds(Long projectId); | ||||
@@ -56,7 +67,7 @@ public interface IProjectService extends IService<Project> { | |||||
update(wrapper); | update(wrapper); | ||||
} | } | ||||
default List<Project> listNewestByProjectCodes(Collection<String> projectCode){ | |||||
default List<Project> listNewestByProjectCodes(Collection<String> projectCode) { | |||||
Wrapper<Project> query = Wrappers.lambdaQuery(Project.class) | Wrapper<Project> query = Wrappers.lambdaQuery(Project.class) | ||||
.eq(Project::getNewest, Boolean.TRUE) | .eq(Project::getNewest, Boolean.TRUE) | ||||
.in(Project::getProjectCode, projectCode); | .in(Project::getProjectCode, projectCode); | ||||
@@ -512,17 +512,19 @@ public class HandlerManage { | |||||
*/ | */ | ||||
private void updateRejectProjectStatus(Long userId, Project project, Integer instType) { | private void updateRejectProjectStatus(Long userId, Project project, Integer instType) { | ||||
stateMachineUtil.reject(project); | stateMachineUtil.reject(project); | ||||
LambdaUpdateWrapper<Project> updateWrapper = Wrappers.lambdaUpdate(); | |||||
project.setUpdateOn(LocalDateTime.now()); | project.setUpdateOn(LocalDateTime.now()); | ||||
project.setUpdateBy(userId); | project.setUpdateBy(userId); | ||||
projectService.updateById(project); | projectService.updateById(project); | ||||
// 如果是预审审批驳回,需要重新盖章,原来盖过章的文件要清空 | // 如果是预审审批驳回,需要重新盖章,原来盖过章的文件要清空 | ||||
LambdaUpdateWrapper<Project> updateWrapper; | |||||
if (InstTypeEnum.PRELIMINARY_PREVIEW.eq(instType)) { | if (InstTypeEnum.PRELIMINARY_PREVIEW.eq(instType)) { | ||||
updateWrapper.set(Project::getPretrialFileId, null) | |||||
updateWrapper = Wrappers.lambdaUpdate(Project.class) | |||||
.set(Project::getPretrialFileId, null) | |||||
.set(Project::getPretrialFileName, null) | .set(Project::getPretrialFileName, null) | ||||
.eq(Project::getId, project.getId()); | .eq(Project::getId, project.getId()); | ||||
} else if (InstTypeEnum.CONSTRUCTION_PLAN_REVIEW.eq(instType)) { | } else if (InstTypeEnum.CONSTRUCTION_PLAN_REVIEW.eq(instType)) { | ||||
updateWrapper.set(Project::getConstructFileId, null) | |||||
updateWrapper = Wrappers.lambdaUpdate(Project.class) | |||||
.set(Project::getConstructFileId, null) | |||||
.set(Project::getConstructFileName, null) | .set(Project::getConstructFileName, null) | ||||
.eq(Project::getId, project.getId()); | .eq(Project::getId, project.getId()); | ||||
} else { | } else { | ||||