@@ -0,0 +1,72 @@ | |||
package com.hz.pm.api.meeting.builder; | |||
import com.hz.pm.api.meeting.entity.domain.MeetingOuterProject; | |||
import com.hz.pm.api.meeting.entity.dto.MeetingReviewProjectDTO; | |||
import com.hz.pm.api.meeting.entity.vo.MeetingReviewProjectVO; | |||
import com.hz.pm.api.projectlib.model.entity.Project; | |||
/** | |||
* <p> | |||
* MeetingReviewResultBuilder | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 19:29 2023/12/21 | |||
*/ | |||
public class MeetingReviewProjectBuilder { | |||
private MeetingReviewProjectBuilder() { | |||
} | |||
public static MeetingReviewProjectDTO convert(Project project){ | |||
MeetingReviewProjectDTO mrp = new MeetingReviewProjectDTO(); | |||
mrp.setProjectId(project.getId()); | |||
mrp.setBuildOrg(project.getBuildOrgName()); | |||
mrp.setProjectName(project.getProjectName()); | |||
mrp.setProjectType(project.getProjectType()); | |||
mrp.setProjectYear(project.getProjectYear()); | |||
mrp.setDeclareAmount(project.getDeclareAmount()); | |||
mrp.setProjectCode(project.getProjectCode()); | |||
return mrp; | |||
} | |||
public static MeetingReviewProjectDTO convert(MeetingOuterProject mop) { | |||
MeetingReviewProjectDTO mrp = new MeetingReviewProjectDTO(); | |||
mrp.setBuildOrg(mop.getBuildOrg()); | |||
mrp.setProjectName(mop.getProjectName()); | |||
mrp.setProjectType(mop.getProjectType()); | |||
mrp.setProjectYear(mop.getProjectYear()); | |||
mrp.setDeclareAmount(mop.getDeclareAmount()); | |||
mrp.setMeetingProjectId(mop.getId()); | |||
return mrp; | |||
} | |||
public static MeetingReviewProjectVO to(Project project) { | |||
return MeetingReviewProjectVO | |||
.builder() | |||
.id(project.getId()) | |||
.projectCode(project.getProjectCode()) | |||
.projectName(project.getProjectName()) | |||
.declaredAmount(project.getDeclareAmount()) | |||
.projectType(project.getProjectType()) | |||
.projectYear(project.getProjectYear()) | |||
.buildOrg(project.getBuildOrgName()) | |||
.createOn(project.getCreateOn()) | |||
.build(); | |||
} | |||
public static MeetingReviewProjectVO to(MeetingOuterProject mop) { | |||
return MeetingReviewProjectVO | |||
.builder() | |||
.meetingProjectId(mop.getId()) | |||
.projectName(mop.getProjectName()) | |||
.declaredAmount(mop.getDeclareAmount()) | |||
.projectType(mop.getProjectType()) | |||
.projectYear(mop.getProjectYear()) | |||
.buildOrg(mop.getBuildOrg()) | |||
.createOn(mop.getCreateOn()) | |||
.build(); | |||
} | |||
} |
@@ -0,0 +1,44 @@ | |||
package com.hz.pm.api.meeting.builder; | |||
import com.hz.pm.api.meeting.entity.domain.MeetingInnerProject; | |||
import com.hz.pm.api.meeting.entity.domain.MeetingOuterProject; | |||
import com.hz.pm.api.meeting.entity.dto.ProjectReviewResultDTO; | |||
/** | |||
* <p> | |||
* ProjectReviewResultBuilder | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 19:21 2023/12/21 | |||
*/ | |||
public class ProjectReviewResultBuilder { | |||
private ProjectReviewResultBuilder() { | |||
} | |||
public static ProjectReviewResultDTO convert(MeetingInnerProject mip) { | |||
ProjectReviewResultDTO prr = new ProjectReviewResultDTO(); | |||
prr.setReviewResult(mip.getReviewResult()); | |||
prr.setBuildNecessity(mip.getBuildNecessity()); | |||
prr.setInvestRationality(mip.getInvestRationality()); | |||
prr.setSuggestedFunding(mip.getSuggestedFunding()); | |||
prr.setOtherAdvices(mip.getOtherAdvices()); | |||
prr.setTechFeasibility(mip.getTechFeasibility()); | |||
prr.setNeedRationality(mip.getNeedRationality()); | |||
return prr; | |||
} | |||
public static ProjectReviewResultDTO convert(MeetingOuterProject mop) { | |||
ProjectReviewResultDTO prr = new ProjectReviewResultDTO(); | |||
prr.setReviewResult(mop.getReviewResult()); | |||
prr.setBuildNecessity(mop.getBuildNecessity()); | |||
prr.setInvestRationality(mop.getInvestRationality()); | |||
prr.setSuggestedFunding(mop.getSuggestedFunding()); | |||
prr.setOtherAdvices(mop.getOtherAdvices()); | |||
prr.setTechFeasibility(mop.getTechFeasibility()); | |||
prr.setNeedRationality(mop.getNeedRationality()); | |||
return prr; | |||
} | |||
} |
@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import java.io.Serializable; | |||
import java.math.BigDecimal; | |||
import java.time.LocalDateTime; | |||
/** | |||
@@ -36,11 +37,26 @@ public class MeetingInnerProject implements Serializable { | |||
@ApiModelProperty("项目编号") | |||
private String projectCode; | |||
@ApiModelProperty("会议结果说明") | |||
private String resultDescription; | |||
@ApiModelProperty("建设必要性") | |||
private String buildNecessity; | |||
@ApiModelProperty("会议结果附件") | |||
private String resultAttachFiles; | |||
@ApiModelProperty("需求合理性") | |||
private String needRationality; | |||
@ApiModelProperty("技术方案可行性") | |||
private String techFeasibility; | |||
@ApiModelProperty("审核结果") | |||
private Integer reviewResult; | |||
@ApiModelProperty("其他意见") | |||
private String otherAdvices; | |||
@ApiModelProperty("投资测算合理性") | |||
private String investRationality; | |||
@ApiModelProperty("建议资金(单位:万元)") | |||
private BigDecimal suggestedFunding; | |||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||
private LocalDateTime updateOn; | |||
@@ -43,11 +43,26 @@ public class MeetingOuterProject implements Serializable { | |||
@ApiModelProperty("申报金额") | |||
private BigDecimal declareAmount; | |||
@ApiModelProperty("会议结果说明") | |||
private String resultDescription; | |||
@ApiModelProperty("建设必要性") | |||
private String buildNecessity; | |||
@ApiModelProperty("会议结果附件") | |||
private String resultAttachFiles; | |||
@ApiModelProperty("需求合理性") | |||
private String needRationality; | |||
@ApiModelProperty("技术方案可行性") | |||
private String techFeasibility; | |||
@ApiModelProperty("审核结果") | |||
private Integer reviewResult; | |||
@ApiModelProperty("其他意见") | |||
private String otherAdvices; | |||
@ApiModelProperty("投资测算合理性") | |||
private String investRationality; | |||
@ApiModelProperty("建议资金(单位:万元)") | |||
private BigDecimal suggestedFunding; | |||
@ApiModelProperty("会议ID") | |||
private Long meetingId; | |||
@@ -16,6 +16,8 @@ import java.math.BigDecimal; | |||
@Data | |||
public class MeetingReviewProjectDTO { | |||
private Long meetingProjectId; | |||
@ApiModelProperty("项目ID") | |||
private Long projectId; | |||
@@ -37,10 +39,7 @@ public class MeetingReviewProjectDTO { | |||
@ApiModelProperty("申报单位") | |||
private String buildOrg; | |||
@ApiModelProperty("会议结果说明") | |||
private String resultDescription; | |||
@ApiModelProperty("会议结果附件") | |||
private String resultAttachFiles; | |||
@ApiModelProperty("评审结果") | |||
private ProjectReviewResultDTO reviewResultDetail; | |||
} |
@@ -0,0 +1,40 @@ | |||
package com.hz.pm.api.meeting.entity.dto; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import java.math.BigDecimal; | |||
/** | |||
* <p> | |||
* ProjectReviewResultDTO | |||
* </p> | |||
* | |||
* @author WendyYang | |||
* @since 17:17 2023/12/21 | |||
*/ | |||
@Data | |||
public class ProjectReviewResultDTO { | |||
@ApiModelProperty("建设必要性") | |||
private String buildNecessity; | |||
@ApiModelProperty("需求合理性") | |||
private String needRationality; | |||
@ApiModelProperty("技术方案可行性") | |||
private String techFeasibility; | |||
@ApiModelProperty("审核结果") | |||
private Integer reviewResult; | |||
@ApiModelProperty("其他意见") | |||
private String otherAdvices; | |||
@ApiModelProperty("投资测算合理性") | |||
private String investRationality; | |||
@ApiModelProperty("建议资金(单位:万元)") | |||
private BigDecimal suggestedFunding; | |||
} |
@@ -5,6 +5,7 @@ import lombok.Data; | |||
import javax.validation.constraints.NotBlank; | |||
import javax.validation.constraints.NotNull; | |||
import java.math.BigDecimal; | |||
/** | |||
* <p> | |||
@@ -32,4 +33,25 @@ public class MeetingResultUploadReq { | |||
@ApiModelProperty("会议结果附件") | |||
private String resultAttachFiles; | |||
@ApiModelProperty("建设必要性") | |||
private String buildNecessity; | |||
@ApiModelProperty("需求合理性") | |||
private String needRationality; | |||
@ApiModelProperty("技术方案可行性") | |||
private String techFeasibility; | |||
@ApiModelProperty("审核结果:1 通过、0 不通过") | |||
private Integer reviewResult; | |||
@ApiModelProperty("其他意见") | |||
private String otherAdvices; | |||
@ApiModelProperty("投资测算合理性") | |||
private String investRationality; | |||
@ApiModelProperty("建议资金(单位:万元)") | |||
private BigDecimal suggestedFunding; | |||
} |
@@ -111,10 +111,4 @@ public class MeetingDetailBasicVO { | |||
@ApiModelProperty("相关材料") | |||
private String attachFiles; | |||
@ApiModelProperty("会议结果说明") | |||
private String resultDescription; | |||
@ApiModelProperty("会议结果附件") | |||
private String resultAttachFiles; | |||
} |
@@ -1,6 +1,7 @@ | |||
package com.hz.pm.api.meeting.entity.vo; | |||
import com.fasterxml.jackson.annotation.JsonFormat; | |||
import com.hz.pm.api.meeting.entity.dto.ProjectReviewResultDTO; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Builder; | |||
import lombok.Data; | |||
@@ -25,6 +26,9 @@ public class MeetingReviewProjectVO { | |||
public MeetingReviewProjectVO() { | |||
} | |||
@ApiModelProperty("会议项目关联ID") | |||
private Long meetingProjectId; | |||
@ApiModelProperty("项目ID") | |||
private Long id; | |||
@@ -46,11 +50,8 @@ public class MeetingReviewProjectVO { | |||
@ApiModelProperty("申报单位") | |||
private String buildOrg; | |||
@ApiModelProperty("会议结果说明") | |||
private String resultDescription; | |||
@ApiModelProperty("会议结果附件") | |||
private String resultAttachFiles; | |||
@ApiModelProperty("评审结果") | |||
private ProjectReviewResultDTO reviewResultDetail; | |||
@ApiModelProperty("创建时间") | |||
@JsonFormat(pattern = "yyyy-MM-dd HH:mm") | |||
@@ -13,13 +13,13 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; | |||
import com.hz.pm.api.common.helper.RegionCacheHelper; | |||
import com.hz.pm.api.common.model.entity.ViewRegionDTO; | |||
import com.hz.pm.api.expert.constant.ReviewResultEnum; | |||
import com.hz.pm.api.expert.entity.ExpertUserFullInfo; | |||
import com.hz.pm.api.expert.model.entity.ExpertReview; | |||
import com.hz.pm.api.expert.service.IExpertReviewService; | |||
import com.hz.pm.api.expert.service.IExpertUserFullInfoService; | |||
import com.hz.pm.api.gov.service.IBelongOrgService; | |||
import com.hz.pm.api.meeting.builder.ExpertInviteBuilder; | |||
import com.hz.pm.api.meeting.builder.MeetingReviewProjectBuilder; | |||
import com.hz.pm.api.meeting.builder.ProjectReviewResultBuilder; | |||
import com.hz.pm.api.meeting.entity.domain.*; | |||
import com.hz.pm.api.meeting.entity.dto.*; | |||
import com.hz.pm.api.meeting.entity.enumeration.ExpertAttendStatusEnum; | |||
@@ -451,6 +451,7 @@ public class MeetingManage { | |||
.invitedStopped(meeting.getInviteStatus()) | |||
.attachFiles(meeting.getAttachFiles()) | |||
.description(meeting.getDescription()) | |||
.smsNotifySign(meeting.getSmsNotifySign()) | |||
.remark(meeting.getRemark()) | |||
.build(); | |||
if (meeting.getIsInnerProject() != null) { | |||
@@ -459,25 +460,21 @@ public class MeetingManage { | |||
Map<Long, MeetingInnerProject> innerProjectMap = CollUtils.listToMap(innerProjects, MeetingInnerProject::getProjectId); | |||
List<Project> projects = projectService.listByIds(innerProjectMap.keySet()); | |||
List<MeetingReviewProjectDTO> convert = CollUtils.convert(projects, w -> { | |||
MeetingReviewProjectDTO mrp = new MeetingReviewProjectDTO(); | |||
mrp.setProjectId(w.getId()); | |||
mrp.setBuildOrg(w.getBuildOrgName()); | |||
mrp.setProjectName(w.getProjectName()); | |||
mrp.setProjectType(w.getProjectType()); | |||
mrp.setProjectYear(w.getProjectYear()); | |||
mrp.setDeclareAmount(w.getDeclareAmount()); | |||
mrp.setProjectCode(w.getProjectCode()); | |||
MeetingInnerProject innerProject = innerProjectMap.get(w.getId()); | |||
if (innerProject != null) { | |||
mrp.setResultAttachFiles(innerProject.getResultAttachFiles()); | |||
mrp.setResultDescription(innerProject.getResultDescription()); | |||
} | |||
MeetingReviewProjectDTO mrp = MeetingReviewProjectBuilder.convert(w); | |||
MeetingInnerProject mip = innerProjectMap.get(mrp.getProjectId()); | |||
mrp.setMeetingProjectId(mip.getId()); | |||
mrp.setReviewResultDetail(ProjectReviewResultBuilder.convert(mip)); | |||
return mrp; | |||
}); | |||
detail.setProjects(convert); | |||
} else { | |||
List<MeetingOuterProject> outerProjects = meetingOuterProjectService.listByMeetingId(meetingId); | |||
detail.setProjects(BeanUtil.copyToList(outerProjects, MeetingReviewProjectDTO.class)); | |||
detail.setProjects(CollUtils.convert(outerProjects, mop -> { | |||
MeetingReviewProjectDTO mrp = MeetingReviewProjectBuilder.convert(mop); | |||
ProjectReviewResultDTO result = ProjectReviewResultBuilder.convert(mop); | |||
mrp.setReviewResultDetail(result); | |||
return mrp; | |||
})); | |||
} | |||
} | |||
detail.setInviteRule(inviteRuleDetail(meetingId)); | |||
@@ -891,7 +888,7 @@ public class MeetingManage { | |||
Page<Project> page = projectService.page(req.page(), query); | |||
PageVo<MeetingReviewProjectVO> result = PageVo.of(null, page.getTotal()); | |||
if (result.getTotal() > 0) { | |||
result.setRecords(CollUtils.convert(page.getRecords(), this::buildProjectList)); | |||
result.setRecords(CollUtils.convert(page.getRecords(), MeetingReviewProjectBuilder::to)); | |||
} | |||
return result; | |||
} | |||
@@ -903,34 +900,22 @@ public class MeetingManage { | |||
Map<Long, MeetingInnerProject> projectMap = CollUtils.listToMap(projects, MeetingInnerProject::getProjectId); | |||
List<Project> projectList = projectService.listByIds(projectMap.keySet()); | |||
return CollUtils.convert(projectList, w -> { | |||
MeetingReviewProjectVO vo = buildProjectList(w); | |||
MeetingInnerProject innerProject = projectMap.get(w.getId()); | |||
if (innerProject != null) { | |||
vo.setResultAttachFiles(innerProject.getResultAttachFiles()); | |||
vo.setResultDescription(innerProject.getResultDescription()); | |||
} | |||
MeetingReviewProjectVO vo = MeetingReviewProjectBuilder.to(w); | |||
MeetingInnerProject mip = projectMap.get(w.getId()); | |||
vo.setMeetingProjectId(mip.getId()); | |||
vo.setReviewResultDetail(ProjectReviewResultBuilder.convert(mip)); | |||
return vo; | |||
}); | |||
} else { | |||
List<MeetingOuterProject> projects = meetingOuterProjectService.listByMeetingId(meetingId); | |||
return BeanUtil.copyToList(projects, MeetingReviewProjectVO.class); | |||
return CollUtils.convert(projects, w -> { | |||
MeetingReviewProjectVO mrr = MeetingReviewProjectBuilder.to(w); | |||
mrr.setReviewResultDetail(ProjectReviewResultBuilder.convert(w)); | |||
return mrr; | |||
}); | |||
} | |||
} | |||
private MeetingReviewProjectVO buildProjectList(Project project) { | |||
return MeetingReviewProjectVO | |||
.builder() | |||
.id(project.getId()) | |||
.projectCode(project.getProjectCode()) | |||
.projectName(project.getProjectName()) | |||
.declaredAmount(project.getDeclareAmount()) | |||
.projectType(project.getProjectType()) | |||
.projectYear(project.getProjectYear()) | |||
.buildOrg(project.getBuildOrgName()) | |||
.createOn(project.getCreateOn()) | |||
.build(); | |||
} | |||
private void buildOptionProjectQuery(LambdaQueryWrapper<Project> query, String meetingType, ProjectStatusEnum status) { | |||
query.eq(Project::getStatus, status.getCode()); | |||
String sql = String.format("select 1 from meeting m inner join meeting_inner_project mip on" + | |||
@@ -962,23 +947,13 @@ public class MeetingManage { | |||
throw BizException.wrap("此会议未关联项目"); | |||
} | |||
if (Boolean.TRUE.equals(meeting.getIsInnerProject())) { | |||
LambdaUpdateWrapper<MeetingInnerProject> mUpdate = Wrappers | |||
.lambdaUpdate(MeetingInnerProject.class) | |||
.set(MeetingInnerProject::getUpdateOn, now) | |||
.set(MeetingInnerProject::getResultDescription, req.getResultDescription()) | |||
.set(MeetingInnerProject::getResultAttachFiles, req.getResultAttachFiles()) | |||
.set(MeetingInnerProject::getUpdateBy, LoginUserUtil.getUserId()) | |||
.eq(MeetingInnerProject::getId, req.getMeetingProjectId()); | |||
meetingInnerProjectService.update(mUpdate); | |||
MeetingInnerProject mip = BeanUtil.copyProperties(req, MeetingInnerProject.class); | |||
mip.setId(req.getMeetingProjectId()); | |||
meetingInnerProjectService.updateById(mip); | |||
} else { | |||
LambdaUpdateWrapper<MeetingOuterProject> mUpdate = Wrappers | |||
.lambdaUpdate(MeetingOuterProject.class) | |||
.set(MeetingOuterProject::getUpdateOn, now) | |||
.set(MeetingOuterProject::getResultDescription, req.getResultDescription()) | |||
.set(MeetingOuterProject::getResultAttachFiles, req.getResultAttachFiles()) | |||
.set(MeetingOuterProject::getUpdateBy, LoginUserUtil.getUserId()) | |||
.eq(MeetingOuterProject::getId, req.getMeetingProjectId()); | |||
meetingOuterProjectService.update(mUpdate); | |||
MeetingOuterProject mop = BeanUtil.copyProperties(req, MeetingOuterProject.class); | |||
mop.setId(req.getMeetingProjectId()); | |||
meetingOuterProjectService.updateById(mop); | |||
} | |||
} finally { | |||
distributedLock.releaseLock(key); | |||