diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingController.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingController.java index e9f2d70..29e6b8a 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingController.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/controller/MeetingController.java @@ -166,5 +166,4 @@ public class MeetingController { } - } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/Meeting.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/Meeting.java index 5ab5301..0b44fb0 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/Meeting.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/domain/Meeting.java @@ -77,6 +77,9 @@ public class Meeting implements Serializable { @ApiModelProperty("是否为内部项目") private Boolean isInnerProject; + @ApiModelProperty("抽取类型") + private Integer inviteType; + @ApiModelProperty("创建人ID") @TableField(fill = FieldFill.INSERT) private Long createBy; diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/ExpertInviteDetailVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/ExpertInviteDetailVO.java index 6b8b442..ce06f39 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/ExpertInviteDetailVO.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/ExpertInviteDetailVO.java @@ -25,6 +25,9 @@ public class ExpertInviteDetailVO { private Boolean confirmedRoster; @ApiModelProperty("邀请名单") - private List inviteExpertList; + private List inviteExpertList; + + @ApiModelProperty("抽取情况") + private List inviteStatistics; } diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/RandomInviteListItemVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteExpertListItemVO.java similarity index 73% rename from pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/RandomInviteListItemVO.java rename to pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteExpertListItemVO.java index 95fb577..deab3fb 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/RandomInviteListItemVO.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteExpertListItemVO.java @@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.EqualsAndHashCode; +import java.time.LocalDateTime; + /** *

* RandomInviteListItemVO @@ -16,7 +18,10 @@ import lombok.EqualsAndHashCode; @Data @ApiModel("邀请名单实体") @EqualsAndHashCode(callSuper = true) -public class RandomInviteListItemVO extends ExpertBasicInfoVO { +public class InviteExpertListItemVO extends ExpertBasicInfoVO { + + @ApiModelProperty("邀请规则ID") + private Long ruleId; @ApiModelProperty("会议ID") private Long meetingId; @@ -27,10 +32,10 @@ public class RandomInviteListItemVO extends ExpertBasicInfoVO { @ApiModelProperty("电话通知状态") private String noticeStatus; - @ApiModelProperty("邀请结果") - private String confirmResult; - @ApiModelProperty("邀请状态") private Integer status; + @ApiModelProperty("通知时间") + private LocalDateTime noticeTime; + } \ No newline at end of file diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteStatisticsByRuleVO.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteStatisticsByRuleVO.java new file mode 100644 index 0000000..1e62231 --- /dev/null +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/entity/vo/InviteStatisticsByRuleVO.java @@ -0,0 +1,50 @@ +package com.ningdatech.pmapi.meeting.entity.vo; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +/** + *

+ * InviteStatisticsVO + *

+ * + * @author WendyYang + * @since 18:07 2023/3/4 + */ +@Data +public class InviteStatisticsByRuleVO { + + @ApiModelProperty("抽取规则ID") + private Long ruleId; + + @ApiModelProperty("抽取人数") + private Integer inviteCnt; + + @ApiModelProperty("同意人数") + private Integer agreeCnt; + + @ApiModelProperty("实抽人数") + private Integer noticedCnt; + + public static InviteStatisticsByRuleVO init(Long ruleId) { + InviteStatisticsByRuleVO statistics = new InviteStatisticsByRuleVO(); + statistics.setRuleId(ruleId); + statistics.setNoticedCnt(0); + statistics.setInviteCnt(0); + statistics.setAgreeCnt(0); + return statistics; + } + + public void incrInviteCnt() { + this.inviteCnt++; + } + + public void incrAgreeCnt() { + this.agreeCnt++; + } + + public void incrNoticedCnt() { + this.noticedCnt++; + } + +} diff --git a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java index 539215f..cf37e8e 100644 --- a/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java +++ b/pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java @@ -358,42 +358,44 @@ public class MeetingManage { if (experts.isEmpty()) { return result; } - List randomList = new ArrayList<>(); - List appointList = new ArrayList<>(); - List attendList = new ArrayList<>(); - List expertIds = new ArrayList<>(); - experts.forEach(w -> { - boolean randomInvite = w.getInviteType().equals(ExpertInviteTypeEnum.RANDOM.getCode()); - if (randomInvite) { - randomList.add(w); - } else { - appointList.add(w); - } - if (w.getStatus().equals(ExpertAttendStatusEnum.AGREED.getCode())) { - attendList.add(w); - if (randomInvite) { - } else { - } - } - expertIds.add(w.getExpertId()); - }); - Map expertBasicInfoVoMap = meetingManageHelper.getExpertBasicInfo(expertIds); - Function mapping = sme -> { - ExpertBasicInfoVO basicInfoVo = expertBasicInfoVoMap.get(sme.getExpertId()); - RandomInviteListItemVO item = BeanUtil.copyProperties(basicInfoVo, RandomInviteListItemVO.class); - item.setStatus(sme.getStatus()); - item.setMeetingId(sme.getMeetingId()); + List expertIds = CollUtils.fieldList(experts, MeetingExpert::getExpertId); + Map expertMap = meetingManageHelper.getExpertBasicInfo(expertIds); + Function mapping = sme -> { + ExpertBasicInfoVO expert = expertMap.get(sme.getExpertId()); + InviteExpertListItemVO item = BeanUtil.copyProperties(expert, InviteExpertListItemVO.class); item.setExpertMeetingId(sme.getId()); - ExpertAttendStatusEnum status = ExpertAttendStatusEnum.getByCode(sme.getStatus()); - if (status.equals(ExpertAttendStatusEnum.NOTICING)) { - item.setNoticeStatus(status.getValue()); - item.setConfirmResult(StrUtil.EMPTY); + item.setMeetingId(sme.getMeetingId()); + item.setStatus(sme.getStatus()); + item.setNoticeTime(sme.getCreateOn()); + item.setRuleId(sme.getRuleId()); + if (ExpertAttendStatusEnum.NOTICING.eq(sme.getStatus())) { + item.setNoticeStatus("通知中"); } else { item.setNoticeStatus("已通知"); - item.setConfirmResult(status.getValue()); } return item; }; + boolean isRandom = ExpertInviteTypeEnum.RANDOM.eq(meeting.getInviteType()); + if (!isRandom) { + result.setInviteStatistics(new ArrayList<>()); + Map> groupByRule = CollUtils.group(experts, MeetingExpert::getRuleId); + List inviteRules = inviteRuleService.listByIds(groupByRule.keySet()); + Map ruleMap = CollUtils.listToMap(inviteRules, ExpertInviteRule::getId); + groupByRule.forEach((ruleId, expertList) -> { + InviteStatisticsByRuleVO statistics = InviteStatisticsByRuleVO.init(ruleId); + expertList.forEach((expert) -> { + Integer status = expert.getStatus(); + if (ExpertAttendStatusEnum.AGREED.eq(status)) { + statistics.incrAgreeCnt(); + } + statistics.setInviteCnt(ruleMap.get(ruleId).getInviteCount()); + statistics.incrNoticedCnt(); + }); + result.getInviteStatistics().add(statistics); + }); + } + List converts = CollUtils.convert(experts, mapping); + result.setInviteExpertList(converts); // 确定参加列表 return result; }