Browse Source

增加会议结果详情接口

tags/24080901
WendyYang 8 months ago
parent
commit
d0630f57a3
15 changed files with 185 additions and 108 deletions
  1. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/builder/ProjectReviewResultBuilder.java
  2. +7
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingController.java
  3. +10
    -4
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingSettingsController.java
  4. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingInnerProject.java
  5. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingOuterProject.java
  6. +1
    -1
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/InviteCallIgnoreTimeContentDTO.java
  7. +1
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/MeetingBasicDTO.java
  8. +2
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ProjectReviewResultDTO.java
  9. +6
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingSettingsTypeEnum.java
  10. +2
    -2
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingSettingsSaveReq.java
  11. +52
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/ProjectReviewResultUploadReq.java
  12. +9
    -0
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/MeetingByManagerVO.java
  13. +4
    -6
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingManageHelper.java
  14. +21
    -38
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/ExpertExportManage.java
  15. +64
    -55
      hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java

+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/builder/ProjectReviewResultBuilder.java View File

@@ -26,6 +26,7 @@ public class ProjectReviewResultBuilder {
prr.setOtherAdvices(mip.getOtherAdvices()); prr.setOtherAdvices(mip.getOtherAdvices());
prr.setTechFeasibility(mip.getTechFeasibility()); prr.setTechFeasibility(mip.getTechFeasibility());
prr.setNeedRationality(mip.getNeedRationality()); prr.setNeedRationality(mip.getNeedRationality());
prr.setAttachFiles(mip.getAttachFiles());
return prr; return prr;
} }


@@ -38,6 +39,7 @@ public class ProjectReviewResultBuilder {
prr.setOtherAdvices(mop.getOtherAdvices()); prr.setOtherAdvices(mop.getOtherAdvices());
prr.setTechFeasibility(mop.getTechFeasibility()); prr.setTechFeasibility(mop.getTechFeasibility());
prr.setNeedRationality(mop.getNeedRationality()); prr.setNeedRationality(mop.getNeedRationality());
prr.setAttachFiles(mop.getAttachFiles());
return prr; return prr;
} }




+ 7
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingController.java View File

@@ -203,6 +203,13 @@ public class MeetingController {
meetingManage.uploadMeetingResult(req); meetingManage.uploadMeetingResult(req);
} }


@GetMapping("/{meetingId}/result/detail")
@ApiOperation("会议结果详情")
@WebLog("会议结详情")
public void uploadMeetingResult(@PathVariable Long meetingId) {
meetingManage.meetingResultDetail(meetingId);
}

@PostMapping("/project/result/upload") @PostMapping("/project/result/upload")
@ApiOperation("评审结果上传") @ApiOperation("评审结果上传")
@WebLog("评审结果上传") @WebLog("评审结果上传")


+ 10
- 4
hz-pm-api/src/main/java/com/hz/pm/api/meeting/controller/MeetingSettingsController.java View File

@@ -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.enumeration.MeetingSettingsTypeEnum;
import com.hz.pm.api.meeting.entity.req.MeetingSettingsSaveReq; import com.hz.pm.api.meeting.entity.req.MeetingSettingsSaveReq;
import com.hz.pm.api.meeting.manage.MeetingSettingsManage; import com.hz.pm.api.meeting.manage.MeetingSettingsManage;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; 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.*;


/** /**
* <p> * <p>
@@ -17,6 +16,7 @@ import org.springframework.web.bind.annotation.RestController;
* @author WendyYang * @author WendyYang
* @since 2023-12-27 * @since 2023-12-27
*/ */
@Api(tags = "会议配置管理")
@RestController @RestController
@AllArgsConstructor @AllArgsConstructor
@RequestMapping("/api/v1/meeting/settings") @RequestMapping("/api/v1/meeting/settings")
@@ -25,9 +25,15 @@ public class MeetingSettingsController {
private final MeetingSettingsManage meetingSettingsManage; private final MeetingSettingsManage meetingSettingsManage;


@GetMapping("/{settingsType}") @GetMapping("/{settingsType}")
@ApiOperation("获取配置详情")
public MeetingSettingsSaveReq getSettings(@PathVariable MeetingSettingsTypeEnum settingsType) { public MeetingSettingsSaveReq getSettings(@PathVariable MeetingSettingsTypeEnum settingsType) {
return meetingSettingsManage.getSettings(settingsType); return meetingSettingsManage.getSettings(settingsType);
} }


@PostMapping("/save")
@ApiOperation("保存配置")
public void saveSettings(@RequestBody MeetingSettingsSaveReq req) {
meetingSettingsManage.saveSettings(req);
}


} }

+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingInnerProject.java View File

@@ -58,6 +58,8 @@ public class MeetingInnerProject implements Serializable {
@ApiModelProperty("建议资金(单位:万元)") @ApiModelProperty("建议资金(单位:万元)")
private BigDecimal suggestedFunding; private BigDecimal suggestedFunding;


private String attachFiles;

@TableField(fill = FieldFill.INSERT_UPDATE) @TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateOn; private LocalDateTime updateOn;




+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/domain/MeetingOuterProject.java View File

@@ -64,6 +64,8 @@ public class MeetingOuterProject implements Serializable {
@ApiModelProperty("建议资金(单位:万元)") @ApiModelProperty("建议资金(单位:万元)")
private BigDecimal suggestedFunding; private BigDecimal suggestedFunding;


private String attachFiles;

@ApiModelProperty("会议ID") @ApiModelProperty("会议ID")
private Long meetingId; private Long meetingId;




hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ExpertInviteIgnoreTimeContentDTO.java → hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/InviteCallIgnoreTimeContentDTO.java View File

@@ -13,7 +13,7 @@ import java.time.LocalTime;
* @since 00:27 2023/12/27 * @since 00:27 2023/12/27
*/ */
@Data @Data
public class ExpertInviteIgnoreTimeContentDTO {
public class InviteCallIgnoreTimeContentDTO {


private LocalTime startTime; private LocalTime startTime;



+ 1
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/MeetingBasicDTO.java View File

@@ -67,6 +67,7 @@ public class MeetingBasicDTO {
private String contact; private String contact;


@ApiModelProperty("是否是系统内部项目") @ApiModelProperty("是否是系统内部项目")
@NotNull(message = "是否系统内项目不能为空")
private Boolean isInnerProject; private Boolean isInnerProject;


@ApiModelProperty("内部项目ID") @ApiModelProperty("内部项目ID")


+ 2
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/dto/ProjectReviewResultDTO.java View File

@@ -37,4 +37,6 @@ public class ProjectReviewResultDTO {
@ApiModelProperty("建议资金(单位:万元)") @ApiModelProperty("建议资金(单位:万元)")
private BigDecimal suggestedFunding; private BigDecimal suggestedFunding;


private String attachFiles;

} }

+ 6
- 2
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/enumeration/MeetingSettingsTypeEnum.java View File

@@ -1,5 +1,7 @@
package com.hz.pm.api.meeting.entity.enumeration; 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.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;


@@ -15,9 +17,11 @@ import lombok.Getter;
@AllArgsConstructor @AllArgsConstructor
public enum MeetingSettingsTypeEnum { 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 String name;
private final Class<?> contentClass;


} }

+ 2
- 2
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingSettingsSaveReq.java View File

@@ -1,6 +1,6 @@
package com.hz.pm.api.meeting.entity.req; 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.dto.ExpertJudgeTimeLimitContentDTO;
import com.hz.pm.api.meeting.entity.enumeration.MeetingSettingsTypeEnum; import com.hz.pm.api.meeting.entity.enumeration.MeetingSettingsTypeEnum;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
@@ -32,7 +32,7 @@ public class MeetingSettingsSaveReq {
public static class SettingsContentPackageDTO { public static class SettingsContentPackageDTO {


@ApiModelProperty("专家邀请免打扰时段设置") @ApiModelProperty("专家邀请免打扰时段设置")
private ExpertInviteIgnoreTimeContentDTO expertInviteIgnoreTimeContent;
private InviteCallIgnoreTimeContentDTO expertInviteIgnoreTimeContent;


@ApiModelProperty("专家评价时间设置") @ApiModelProperty("专家评价时间设置")
private ExpertJudgeTimeLimitContentDTO expertJudgeTimeLimitContent; private ExpertJudgeTimeLimitContentDTO expertJudgeTimeLimitContent;


+ 52
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/ProjectReviewResultUploadReq.java View File

@@ -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;

/**
* <p>
* MeetingResultUploadReq
* </p>
*
* @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;

}

+ 9
- 0
hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/MeetingByManagerVO.java View File

@@ -80,4 +80,13 @@ public class MeetingByManagerVO {
@ApiModelProperty("是否评价") @ApiModelProperty("是否评价")
private Boolean hasJudge; private Boolean hasJudge;


@ApiModelProperty("是否关联系统内项目")
private Boolean isInnerProject;

@ApiModelProperty("会议结果是否上传")
private Boolean hasMeetingResult;

@ApiModelProperty("所有项目是否已上传评审结果")
private Boolean allProjectReviewed;

} }

+ 4
- 6
hz-pm-api/src/main/java/com/hz/pm/api/meeting/helper/MeetingManageHelper.java View File

@@ -61,12 +61,8 @@ public class MeetingManageHelper {
private final RegionCacheHelper regionCacheHelper; private final RegionCacheHelper regionCacheHelper;


public void checkReviewProject(MeetingBasicDTO meetingBasic) { 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.setConnecter(meeting.getConnecter());
result.setContact(meeting.getContact()); result.setContact(meeting.getContact());
result.setMeetingAddress(meeting.getMeetingAddress()); result.setMeetingAddress(meeting.getMeetingAddress());
result.setIsInnerProject(meeting.getIsInnerProject());
result.setHasMeetingResult(StrUtil.isNotBlank(meeting.getResultDescription()));
return result; return result;
} }




+ 21
- 38
hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/ExpertExportManage.java View File

@@ -104,14 +104,11 @@ public class ExpertExportManage {
data.setMeetingTime(DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy-MM-dd HH:mm")); data.setMeetingTime(DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy-MM-dd HH:mm"));
data.setMeetingAddress(meeting.getMeetingAddress()); data.setMeetingAddress(meeting.getMeetingAddress());
List<String> projectNames = new ArrayList<>(); List<String> projectNames = new ArrayList<>();
if (meeting.getIsInnerProject()) {
if (Boolean.TRUE.equals(meeting.getIsInnerProject())) {
List<MeetingInnerProject> inners = meetingInnerProjectService.listByMeetingId(meetingId); List<MeetingInnerProject> inners = meetingInnerProjectService.listByMeetingId(meetingId);
List<Long> projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId); List<Long> projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
List<Project> projects = projectService.listByIds(projectIds); List<Project> projects = projectService.listByIds(projectIds);
projects.forEach(w -> projectNames.add(w.getProjectName())); projects.forEach(w -> projectNames.add(w.getProjectName()));
} else {
List<MeetingOuterProject> inners = meetingOuterProjectService.listByMeetingId(meetingId);
inners.forEach(w -> projectNames.add(w.getProjectName()));
} }
data.setProjectName(StrUtil.join("、", projectNames)); data.setProjectName(StrUtil.join("、", projectNames));
data.setExperts(new ArrayList<>()); data.setExperts(new ArrayList<>());
@@ -147,41 +144,27 @@ public class ExpertExportManage {
public void expertReviewTable(Long meetingId, HttpServletResponse response) { public void expertReviewTable(Long meetingId, HttpServletResponse response) {
try { try {
Meeting meeting = meetingService.getById(meetingId); Meeting meeting = meetingService.getById(meetingId);
String startTime = DateUtil.localDateTimeFormat(meeting.getStartTime(), "yyyy年M月d日");
List<FreemarkerBatchExportDTO> fbeList;
if (meeting.getIsInnerProject()) {
List<MeetingInnerProject> inners = meetingInnerProjectService.listByMeetingId(meetingId);
Map<Long, String> reviewResultMap = expertReviewManage.buildExpertReviewToStr(meetingId);
List<Long> projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
List<Project> 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<MeetingOuterProject> 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<MeetingInnerProject> inners = meetingInnerProjectService.listByMeetingId(meetingId);
Map<Long, String> reviewResultMap = expertReviewManage.buildExpertReviewToStr(meetingId);
List<Long> projectIds = CollUtils.fieldList(inners, MeetingInnerProject::getProjectId);
List<Project> projects = projectService.listByIds(projectIds);
List<FreemarkerBatchExportDTO> 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"; String exportFileName = meeting.getName() + "专家评审表.zip";
FreemarkerWordUtil.exportBatch(response, fbeList, exportFileName); FreemarkerWordUtil.exportBatch(response, fbeList, exportFileName);
} catch (TemplateException | IOException e) { } catch (TemplateException | IOException e) {


+ 64
- 55
hz-pm-api/src/main/java/com/hz/pm/api/meeting/manage/MeetingManage.java View File

@@ -137,22 +137,13 @@ public class MeetingManage {
meeting.setConfirmedRoster(Boolean.FALSE); meeting.setConfirmedRoster(Boolean.FALSE);
meeting.setInviteType(inviteRule.getInviteType()); meeting.setInviteType(inviteRule.getInviteType());
meetingService.save(meeting); meetingService.save(meeting);
if (meeting.getIsInnerProject() != null) {
if (Boolean.TRUE.equals(meetingBasic.getIsInnerProject())) {
List<MeetingInnerProject> 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<MeetingOuterProject> 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<MeetingInnerProject> 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()); inviteRule.setMeetingId(meeting.getId());
@@ -411,13 +402,42 @@ public class MeetingManage {
return PageVo.empty(); return PageVo.empty();
} }
PageVo<MeetingByManagerVO> result = new PageVo<>(new ArrayList<>(), page.getTotal()); PageVo<MeetingByManagerVO> result = new PageVo<>(new ArrayList<>(), page.getTotal());
LocalDateTime now = LocalDateTime.now();
List<Long> 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<Long, Boolean> projectReviewProgress;
if (!meetingIds.isEmpty()) {
projectReviewProgress = getMeetingProjectReviewProgress(meetingIds);
} else {
projectReviewProgress = Collections.emptyMap();
}
page.getRecords().forEach(meeting -> { page.getRecords().forEach(meeting -> {
MeetingByManagerVO item = meetingManageHelper.buildByMeeting(meeting); MeetingByManagerVO item = meetingManageHelper.buildByMeeting(meeting);
item.setAllProjectReviewed(projectReviewProgress.get(meeting.getId()));
result.getRecords().add(item); result.getRecords().add(item);
}); });
return result; return result;
} }


private Map<Long, Boolean> getMeetingProjectReviewProgress(Collection<Long> meetingIds) {
Wrapper<MeetingInnerProject> query = Wrappers.lambdaQuery(MeetingInnerProject.class)
.select(MeetingInnerProject::getReviewResult, MeetingInnerProject::getMeetingId)
.in(MeetingInnerProject::getMeetingId, meetingIds);
List<MeetingInnerProject> 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) { public MeetingDetailBasicVO getMeetingDetail(Long meetingId) {
Meeting meeting = meetingService.getById(meetingId); Meeting meeting = meetingService.getById(meetingId);
Assert.notNull(meeting, "会议不存在"); Assert.notNull(meeting, "会议不存在");
@@ -445,28 +465,18 @@ public class MeetingManage {
.resultAttachFiles(meeting.getResultAttachFiles()) .resultAttachFiles(meeting.getResultAttachFiles())
.remark(meeting.getRemark()) .remark(meeting.getRemark())
.build(); .build();
if (meeting.getIsInnerProject() != null) {
if (Boolean.TRUE.equals(meeting.getIsInnerProject())) {
List<MeetingInnerProject> innerProjects = meetingInnerProjectService.listByMeetingId(meetingId);
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 = 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(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<MeetingInnerProject> innerProjects = meetingInnerProjectService.listByMeetingId(meetingId);
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 = 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)); detail.setInviteRule(inviteRuleDetail(meetingId));
return detail; return detail;
@@ -897,14 +907,8 @@ public class MeetingManage {
vo.setReviewResultDetail(ProjectReviewResultBuilder.convert(mip)); vo.setReviewResultDetail(ProjectReviewResultBuilder.convert(mip));
return vo; return vo;
}); });
} else {
List<MeetingOuterProject> 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<Project> query, String meetingType, ProjectStatusEnum status) { private void buildOptionProjectQuery(LambdaQueryWrapper<Project> 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) { public void uploadProjectReviewResult(ProjectReviewResultUploadReq req) {
String key = "meeting_project_result_upload:" + req.getMeetingProjectId(); String key = "meeting_project_result_upload:" + req.getMeetingProjectId();
if (!distributedLock.lock(key, RETRY_TIMES)) { if (!distributedLock.lock(key, RETRY_TIMES)) {
@@ -959,18 +974,12 @@ public class MeetingManage {
if (meeting.getEndTime().isAfter(now)) { if (meeting.getEndTime().isAfter(now)) {
throw BizException.wrap("会议未结束"); throw BizException.wrap("会议未结束");
} }
if (meeting.getIsInnerProject() == null) {
if (meeting.getIsInnerProject()) {
throw BizException.wrap("此会议未关联项目"); 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 { } finally {
distributedLock.releaseLock(key); distributedLock.releaseLock(key);
} }


Loading…
Cancel
Save