diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/builder/ProjectReviewResultBuilder.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/builder/ProjectReviewResultBuilder.java index 9a1ec43..8a8e1d3 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/builder/ProjectReviewResultBuilder.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/builder/ProjectReviewResultBuilder.java @@ -26,6 +26,7 @@ public class ProjectReviewResultBuilder { prr.setOtherAdvices(mip.getOtherAdvices()); prr.setTechFeasibility(mip.getTechFeasibility()); prr.setNeedRationality(mip.getNeedRationality()); + prr.setAttachFiles(mip.getAttachFiles()); return prr; } @@ -38,6 +39,7 @@ public class ProjectReviewResultBuilder { prr.setOtherAdvices(mop.getOtherAdvices()); prr.setTechFeasibility(mop.getTechFeasibility()); prr.setNeedRationality(mop.getNeedRationality()); + prr.setAttachFiles(mop.getAttachFiles()); return prr; } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingController.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingController.java index 94a97b1..107f21d 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingController.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingController.java @@ -203,6 +203,13 @@ public class MeetingController { meetingManage.uploadMeetingResult(req); } + @GetMapping("/{meetingId}/result/detail") + @ApiOperation("会议结果详情") + @WebLog("会议结详情") + public void uploadMeetingResult(@PathVariable Long meetingId) { + meetingManage.meetingResultDetail(meetingId); + } + @PostMapping("/project/result/upload") @ApiOperation("评审结果上传") @WebLog("评审结果上传") diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingSettingsController.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingSettingsController.java index 422f342..ba83cf6 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingSettingsController.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingSettingsController.java @@ -3,11 +3,10 @@ package com.hz.pm.api.meeting.controller; import com.hz.pm.api.meeting.entity.enumeration.MeetingSettingsTypeEnum; import com.hz.pm.api.meeting.entity.req.MeetingSettingsSaveReq; import com.hz.pm.api.meeting.manage.MeetingSettingsManage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; /** *

@@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController; * @author WendyYang * @since 2023-12-27 */ +@Api(tags = "会议配置管理") @RestController @AllArgsConstructor @RequestMapping("/api/v1/meeting/settings") @@ -25,9 +25,15 @@ public class MeetingSettingsController { private final MeetingSettingsManage meetingSettingsManage; @GetMapping("/{settingsType}") + @ApiOperation("获取配置详情") public MeetingSettingsSaveReq getSettings(@PathVariable MeetingSettingsTypeEnum settingsType) { return meetingSettingsManage.getSettings(settingsType); } + @PostMapping("/save") + @ApiOperation("保存配置") + public void saveSettings(@RequestBody MeetingSettingsSaveReq req) { + meetingSettingsManage.saveSettings(req); + } } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingInnerProject.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingInnerProject.java index 1c88f29..afd1dbb 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingInnerProject.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingInnerProject.java @@ -58,6 +58,8 @@ public class MeetingInnerProject implements Serializable { @ApiModelProperty("建议资金(单位:万元)") private BigDecimal suggestedFunding; + private String attachFiles; + @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime updateOn; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingOuterProject.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingOuterProject.java index b704cad..b552499 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingOuterProject.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingOuterProject.java @@ -64,6 +64,8 @@ public class MeetingOuterProject implements Serializable { @ApiModelProperty("建议资金(单位:万元)") private BigDecimal suggestedFunding; + private String attachFiles; + @ApiModelProperty("会议ID") private Long meetingId; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ExpertInviteIgnoreTimeContentDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/InviteCallIgnoreTimeContentDTO.java similarity index 85% rename from hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ExpertInviteIgnoreTimeContentDTO.java rename to hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/InviteCallIgnoreTimeContentDTO.java index bdd66dd..e44486a 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ExpertInviteIgnoreTimeContentDTO.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/InviteCallIgnoreTimeContentDTO.java @@ -13,7 +13,7 @@ import java.time.LocalTime; * @since 00:27 2023/12/27 */ @Data -public class ExpertInviteIgnoreTimeContentDTO { +public class InviteCallIgnoreTimeContentDTO { private LocalTime startTime; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/MeetingBasicDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/MeetingBasicDTO.java index 0f27810..e9e29ea 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/MeetingBasicDTO.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/MeetingBasicDTO.java @@ -67,6 +67,7 @@ public class MeetingBasicDTO { private String contact; @ApiModelProperty("是否是系统内部项目") + @NotNull(message = "是否系统内项目不能为空") private Boolean isInnerProject; @ApiModelProperty("内部项目ID") diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ProjectReviewResultDTO.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ProjectReviewResultDTO.java index 3975a6f..344d644 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ProjectReviewResultDTO.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ProjectReviewResultDTO.java @@ -37,4 +37,6 @@ public class ProjectReviewResultDTO { @ApiModelProperty("建议资金(单位:万元)") private BigDecimal suggestedFunding; + private String attachFiles; + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingSettingsTypeEnum.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingSettingsTypeEnum.java index 475db69..28bcc61 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingSettingsTypeEnum.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingSettingsTypeEnum.java @@ -1,5 +1,7 @@ package com.hz.pm.api.meeting.entity.enumeration; +import com.hz.pm.api.meeting.entity.dto.ExpertJudgeTimeLimitContentDTO; +import com.hz.pm.api.meeting.entity.dto.InviteCallIgnoreTimeContentDTO; import lombok.AllArgsConstructor; import lombok.Getter; @@ -15,9 +17,11 @@ import lombok.Getter; @AllArgsConstructor public enum MeetingSettingsTypeEnum { - MEETING_INVITE_IGNORE_TIME("专家抽取免打扰时段配置"), - EXPERT_JUDGE_TIME_LIMIT("专家星级评分时间配置"); + INVITE_CALL_IGNORE_TIME("专家抽取免打扰时段配置", InviteCallIgnoreTimeContentDTO.class), + SMS_SEND_IGNORE_TIME("短信发送免打扰时间段", InviteCallIgnoreTimeContentDTO.class), + EXPERT_JUDGE_TIME_LIMIT("专家星级评分时间配置", ExpertJudgeTimeLimitContentDTO.class); private final String name; + private final Class contentClass; } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingSettingsSaveReq.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingSettingsSaveReq.java index 1c00594..2e879f0 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingSettingsSaveReq.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingSettingsSaveReq.java @@ -1,6 +1,6 @@ package com.hz.pm.api.meeting.entity.req; -import com.hz.pm.api.meeting.entity.dto.ExpertInviteIgnoreTimeContentDTO; +import com.hz.pm.api.meeting.entity.dto.InviteCallIgnoreTimeContentDTO; import com.hz.pm.api.meeting.entity.dto.ExpertJudgeTimeLimitContentDTO; import com.hz.pm.api.meeting.entity.enumeration.MeetingSettingsTypeEnum; import io.swagger.annotations.ApiModelProperty; @@ -32,7 +32,7 @@ public class MeetingSettingsSaveReq { public static class SettingsContentPackageDTO { @ApiModelProperty("专家邀请免打扰时段设置") - private ExpertInviteIgnoreTimeContentDTO expertInviteIgnoreTimeContent; + private InviteCallIgnoreTimeContentDTO expertInviteIgnoreTimeContent; @ApiModelProperty("专家评价时间设置") private ExpertJudgeTimeLimitContentDTO expertJudgeTimeLimitContent; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/ProjectReviewResultUploadReq.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/ProjectReviewResultUploadReq.java new file mode 100644 index 0000000..2e9a9ec --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/ProjectReviewResultUploadReq.java @@ -0,0 +1,52 @@ +package com.hz.pm.api.meeting.entity.req; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.math.BigDecimal; + +/** + *

+ * MeetingResultUploadReq + *

+ * + * @author WendyYang + * @since 15:35 2023/12/18 + */ +@Data +public class ProjectReviewResultUploadReq { + + @ApiModelProperty("会议ID") + @NotNull(message = "会议ID不能为空") + private Long meetingId; + + @ApiModelProperty("项目关联会议ID") + @NotNull(message = "项目关联会议ID不能为空") + private Long meetingProjectId; + + @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; + + @ApiModelProperty("相关材料") + private String attachFiles; + +} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/MeetingByManagerVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/MeetingByManagerVO.java index f8be7bb..fda5e0a 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/MeetingByManagerVO.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/MeetingByManagerVO.java @@ -80,4 +80,13 @@ public class MeetingByManagerVO { @ApiModelProperty("是否评价") private Boolean hasJudge; + @ApiModelProperty("是否关联系统内项目") + private Boolean isInnerProject; + + @ApiModelProperty("会议结果是否上传") + private Boolean hasMeetingResult; + + @ApiModelProperty("所有项目是否已上传评审结果") + private Boolean allProjectReviewed; + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingManageHelper.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingManageHelper.java index e510cdf..f3d83c1 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingManageHelper.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingManageHelper.java @@ -61,12 +61,8 @@ public class MeetingManageHelper { private final RegionCacheHelper regionCacheHelper; public void checkReviewProject(MeetingBasicDTO meetingBasic) { - if (meetingBasic.getIsInnerProject() != null) { - if (meetingBasic.getIsInnerProject()) { - Assert.notEmpty(meetingBasic.getInnerProjects(), "评审项目不能为空"); - } else { - Assert.notEmpty(meetingBasic.getProjects(), "评审项目不能为空"); - } + if (Boolean.TRUE.equals(meetingBasic.getIsInnerProject())) { + Assert.notEmpty(meetingBasic.getInnerProjects(), "评审项目不能为空"); } } @@ -117,6 +113,8 @@ public class MeetingManageHelper { result.setConnecter(meeting.getConnecter()); result.setContact(meeting.getContact()); result.setMeetingAddress(meeting.getMeetingAddress()); + result.setIsInnerProject(meeting.getIsInnerProject()); + result.setHasMeetingResult(StrUtil.isNotBlank(meeting.getResultDescription())); return result; } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/ExpertExportManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/ExpertExportManage.java index 922382f..2bc10df 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/ExpertExportManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/ExpertExportManage.java @@ -104,14 +104,11 @@ public class ExpertExportManage { data.setMeetingTime(DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy-MM-dd HH:mm")); data.setMeetingAddress(meeting.getMeetingAddress()); List projectNames = new ArrayList<>(); - if (meeting.getIsInnerProject()) { + if (Boolean.TRUE.equals(meeting.getIsInnerProject())) { List inners = meetingInnerProjectService.listByMeetingId(meetingId); List projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId); List projects = projectService.listByIds(projectIds); projects.forEach(w -> projectNames.add(w.getProjectName())); - } else { - List inners = meetingOuterProjectService.listByMeetingId(meetingId); - inners.forEach(w -> projectNames.add(w.getProjectName())); } data.setProjectName(StrUtil.join("、", projectNames)); data.setExperts(new ArrayList<>()); @@ -147,41 +144,27 @@ public class ExpertExportManage { public void expertReviewTable(Long meetingId, HttpServletResponse response) { try { Meeting meeting = meetingService.getById(meetingId); - String startTime = DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy年M月d日"); - List fbeList; - if (meeting.getIsInnerProject()) { - List inners = meetingInnerProjectService.listByMeetingId(meetingId); - Map reviewResultMap = expertReviewManage.buildExpertReviewToStr(meetingId); - List projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId); - List projects = projectService.listByIds(projectIds); - fbeList = projects.stream().map(w -> { - FreemarkerBatchExportDTO fbe = new FreemarkerBatchExportDTO(); - ExpertReviewTableDTO currData = new ExpertReviewTableDTO(); - currData.setHoldOrg(meeting.getHoldOrg()); - currData.setMeetingTime(startTime); - currData.setMeetingAddress(meeting.getMeetingAddress()); - currData.setProjectName(w.getProjectName()); - currData.setReviewResult(reviewResultMap.get(w.getId())); - fbe.setData(currData); - fbe.setTemplate(EXPERT_REVIEW); - fbe.setFileName(w.getProjectName() + ".doc"); - return fbe; - }).collect(Collectors.toList()); - } else { - List inners = meetingOuterProjectService.listByMeetingId(meetingId); - fbeList = inners.stream().map(w -> { - FreemarkerBatchExportDTO fbe = new FreemarkerBatchExportDTO(); - ExpertReviewTableDTO currData = new ExpertReviewTableDTO(); - currData.setHoldOrg(meeting.getHoldOrg()); - currData.setMeetingTime(startTime); - currData.setMeetingAddress(meeting.getMeetingAddress()); - currData.setProjectName(w.getProjectName()); - fbe.setData(currData); - fbe.setTemplate(EXPERT_REVIEW); - fbe.setFileName(w.getProjectName() + ".doc"); - return fbe; - }).collect(Collectors.toList()); + if (!Boolean.TRUE.equals(meeting.getIsInnerProject())) { + throw BizException.wrap("未关联项目"); } + String startTime = DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy年M月d日"); + List inners = meetingInnerProjectService.listByMeetingId(meetingId); + Map reviewResultMap = expertReviewManage.buildExpertReviewToStr(meetingId); + List projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId); + List projects = projectService.listByIds(projectIds); + List fbeList = projects.stream().map(w -> { + FreemarkerBatchExportDTO fbe = new FreemarkerBatchExportDTO(); + ExpertReviewTableDTO currData = new ExpertReviewTableDTO(); + currData.setHoldOrg(meeting.getHoldOrg()); + currData.setMeetingTime(startTime); + currData.setMeetingAddress(meeting.getMeetingAddress()); + currData.setProjectName(w.getProjectName()); + currData.setReviewResult(reviewResultMap.get(w.getId())); + fbe.setData(currData); + fbe.setTemplate(EXPERT_REVIEW); + fbe.setFileName(w.getProjectName() + ".doc"); + return fbe; + }).collect(Collectors.toList()); String exportFileName = meeting.getName() + "专家评审表.zip"; FreemarkerWordUtil.exportBatch(response, fbeList, exportFileName); } catch (TemplateException | IOException e) { diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java index 1b8d436..59be241 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java @@ -137,22 +137,13 @@ public class MeetingManage { meeting.setConfirmedRoster(Boolean.FALSE); meeting.setInviteType(inviteRule.getInviteType()); meetingService.save(meeting); - if (meeting.getIsInnerProject() != null) { - if (Boolean.TRUE.equals(meetingBasic.getIsInnerProject())) { - List projects = meetingBasic.getInnerProjects().stream().map(w -> { - MeetingInnerProject project = BeanUtil.copyProperties(w, MeetingInnerProject.class); - project.setMeetingId(meeting.getId()); - return project; - }).collect(Collectors.toList()); - meetingInnerProjectService.saveBatch(projects); - } else { - List projects = meetingBasic.getProjects().stream().map(w -> { - MeetingOuterProject project = BeanUtil.copyProperties(w, MeetingOuterProject.class); - project.setMeetingId(meeting.getId()); - return project; - }).collect(Collectors.toList()); - meetingOuterProjectService.saveBatch(projects); - } + if (Boolean.TRUE.equals(meetingBasic.getIsInnerProject())) { + List projects = meetingBasic.getInnerProjects().stream().map(w -> { + MeetingInnerProject project = BeanUtil.copyProperties(w, MeetingInnerProject.class); + project.setMeetingId(meeting.getId()); + return project; + }).collect(Collectors.toList()); + meetingInnerProjectService.saveBatch(projects); } // 抽取专家 inviteRule.setMeetingId(meeting.getId()); @@ -411,13 +402,42 @@ public class MeetingManage { return PageVo.empty(); } PageVo result = new PageVo<>(new ArrayList<>(), page.getTotal()); + LocalDateTime now = LocalDateTime.now(); + List meetingIds = page.getRecords().stream() + .filter(w -> { + if (!MeetingStatusEnum.NORMAL.eq(w.getStatus())) { + return Boolean.FALSE; + } + if (!Boolean.TRUE.equals(w.getIsInnerProject())) { + return Boolean.FALSE; + } + return w.getEndTime().isBefore(now); + }).map(Meeting::getId) + .collect(Collectors.toList()); + Map projectReviewProgress; + if (!meetingIds.isEmpty()) { + projectReviewProgress = getMeetingProjectReviewProgress(meetingIds); + } else { + projectReviewProgress = Collections.emptyMap(); + } page.getRecords().forEach(meeting -> { MeetingByManagerVO item = meetingManageHelper.buildByMeeting(meeting); + item.setAllProjectReviewed(projectReviewProgress.get(meeting.getId())); result.getRecords().add(item); }); return result; } + private Map getMeetingProjectReviewProgress(Collection meetingIds) { + Wrapper query = Wrappers.lambdaQuery(MeetingInnerProject.class) + .select(MeetingInnerProject::getReviewResult, MeetingInnerProject::getMeetingId) + .in(MeetingInnerProject::getMeetingId, meetingIds); + List projects = meetingInnerProjectService.list(query); + return projects.stream().collect(Collectors.groupingBy(MeetingInnerProject::getMeetingId, + Collectors.collectingAndThen(Collectors.toList(), + w -> w.stream().noneMatch(x -> x.getReviewResult() == null)))); + } + public MeetingDetailBasicVO getMeetingDetail(Long meetingId) { Meeting meeting = meetingService.getById(meetingId); Assert.notNull(meeting, "会议不存在"); @@ -445,28 +465,18 @@ public class MeetingManage { .resultAttachFiles(meeting.getResultAttachFiles()) .remark(meeting.getRemark()) .build(); - if (meeting.getIsInnerProject() != null) { - if (Boolean.TRUE.equals(meeting.getIsInnerProject())) { - List innerProjects = meetingInnerProjectService.listByMeetingId(meetingId); - Map innerProjectMap = CollUtils.listToMap(innerProjects, MeetingInnerProject::getProjectId); - List projects = projectService.listByIds(innerProjectMap.keySet()); - List convert = CollUtils.convert(projects, w -> { - 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 outerProjects = meetingOuterProjectService.listByMeetingId(meetingId); - detail.setProjects(CollUtils.convert(outerProjects, mop -> { - MeetingReviewProjectDTO mrp = MeetingReviewProjectBuilder.convert(mop); - ProjectReviewResultDTO result = ProjectReviewResultBuilder.convert(mop); - mrp.setReviewResultDetail(result); - return mrp; - })); - } + if (Boolean.TRUE.equals(meeting.getIsInnerProject())) { + List innerProjects = meetingInnerProjectService.listByMeetingId(meetingId); + Map innerProjectMap = CollUtils.listToMap(innerProjects, MeetingInnerProject::getProjectId); + List projects = projectService.listByIds(innerProjectMap.keySet()); + List convert = CollUtils.convert(projects, w -> { + 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); } detail.setInviteRule(inviteRuleDetail(meetingId)); return detail; @@ -897,14 +907,8 @@ public class MeetingManage { vo.setReviewResultDetail(ProjectReviewResultBuilder.convert(mip)); return vo; }); - } else { - List projects = meetingOuterProjectService.listByMeetingId(meetingId); - return CollUtils.convert(projects, w -> { - MeetingReviewProjectVO mrr = MeetingReviewProjectBuilder.to(w); - mrr.setReviewResultDetail(ProjectReviewResultBuilder.convert(w)); - return mrr; - }); } + return Collections.emptyList(); } private void buildOptionProjectQuery(LambdaQueryWrapper query, String meetingType, ProjectStatusEnum status) { @@ -945,6 +949,17 @@ public class MeetingManage { } } + public MeetingResultUploadReq meetingResultDetail(Long meetingId) { + Meeting meeting = meetingService.getById(meetingId); + if (StrUtil.isBlank(meeting.getResultDescription())) { + throw BizException.wrap("未上传会议结果"); + } + MeetingResultUploadReq result = new MeetingResultUploadReq(); + result.setResultDescription(meeting.getResultDescription()); + result.setResultAttachFiles(meeting.getResultAttachFiles()); + return result; + } + public void uploadProjectReviewResult(ProjectReviewResultUploadReq req) { String key = "meeting_project_result_upload:" + req.getMeetingProjectId(); if (!distributedLock.lock(key, RETRY_TIMES)) { @@ -959,18 +974,12 @@ public class MeetingManage { if (meeting.getEndTime().isAfter(now)) { throw BizException.wrap("会议未结束"); } - if (meeting.getIsInnerProject() == null) { + if (meeting.getIsInnerProject()) { throw BizException.wrap("此会议未关联项目"); } - if (Boolean.TRUE.equals(meeting.getIsInnerProject())) { - MeetingInnerProject mip = BeanUtil.copyProperties(req, MeetingInnerProject.class); - mip.setId(req.getMeetingProjectId()); - meetingInnerProjectService.updateById(mip); - } else { - MeetingOuterProject mop = BeanUtil.copyProperties(req, MeetingOuterProject.class); - mop.setId(req.getMeetingProjectId()); - meetingOuterProjectService.updateById(mop); - } + MeetingInnerProject mip = BeanUtil.copyProperties(req, MeetingInnerProject.class); + mip.setId(req.getMeetingProjectId()); + meetingInnerProjectService.updateById(mip); } finally { distributedLock.releaseLock(key); }