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 e6cc86a..d4ef85f 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,4 +203,11 @@ public class MeetingController { meetingManage.uploadMeetingResult(req); } + @GetMapping("/{meetingId}/listExpertEval") + @ApiOperation("查询会议专家评价信息") + @WebLog("查询会议专家评价信息") + public List listExpertEval(@PathVariable Long meetingId) { + return meetingManage.listExpertEval(meetingId); + } + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingExpertEvalReq.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingExpertEvalReq.java new file mode 100644 index 0000000..6ea0385 --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingExpertEvalReq.java @@ -0,0 +1,23 @@ +package com.hz.pm.api.meeting.entity.req; + +import com.ningdatech.basic.model.PagePo; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * MeetingExpertEvaluationReq + *

+ * + * @author WendyYang + * @since 16:44 2023/12/18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class MeetingExpertEvalReq extends PagePo { + + @ApiModelProperty("会议ID") + private Long meetingId; + +} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingResultReq.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingResultReq.java deleted file mode 100644 index b355ee3..0000000 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/req/MeetingResultReq.java +++ /dev/null @@ -1,34 +0,0 @@ -package com.hz.pm.api.meeting.entity.req; - -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import java.util.List; - -/** - *

- * MeetingResultPo - *

- * - * @author WendyYang - * @since 21:20 2022/8/8 - */ -@Data -@ApiModel("会议结果上传实体") -public class MeetingResultReq { - - @NotNull(message = "事务ID不能为空") - @ApiModelProperty("事务ID") - private Long meetingId; - - @NotBlank(message = "会议结果说明不能为空") - @ApiModelProperty("会议结果说明") - private String resultDescription; - - @ApiModelProperty("附件ID") - private List attachments; - -} diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertBasicInfoVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertBasicInfoVO.java index e061fd1..e2d0361 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertBasicInfoVO.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertBasicInfoVO.java @@ -2,9 +2,7 @@ package com.hz.pm.api.meeting.entity.vo; import com.hz.pm.api.sys.model.dto.RegionDTO; import io.swagger.annotations.ApiModelProperty; -import lombok.Builder; import lombok.Data; -import lombok.experimental.Tolerate; import java.util.List; @@ -17,13 +15,8 @@ import java.util.List; * @since 15:58 2022/8/8 */ @Data -@Builder public class ExpertBasicInfoVO { - @Tolerate - public ExpertBasicInfoVO() { - } - @ApiModelProperty("专家ID") private Long expertId; diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertEvalListItemVO.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertEvalListItemVO.java new file mode 100644 index 0000000..4af2ae0 --- /dev/null +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/entity/vo/ExpertEvalListItemVO.java @@ -0,0 +1,20 @@ +package com.hz.pm.api.meeting.entity.vo; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + *

+ * ExpertEvaluationListItemVO + *

+ * + * @author WendyYang + * @since 16:24 2023/12/18 + */ +@Data +@EqualsAndHashCode(callSuper = true) +public class ExpertEvalListItemVO extends ExpertBasicInfoVO{ + + private Long evaluationId; + +} 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 506fa63..8570d6b 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 @@ -98,6 +98,7 @@ public class MeetingManage { private final MeetingCallOrMsgHelper meetingCallOrMsgHelper; private final MeetingDataScopeHelper meetingDataScopeHelper; private final IMeetingExpertJudgeService expertJudgeService; + private final IMeetingExpertEvaluationService expertEvaluationService; private static final String INVITED_RULE_CREATE = "INVITED_RULE_CREATE:"; private static final String MEETING_CREATE_KEY = "MEETING_CREATE:"; @@ -945,21 +946,46 @@ public class MeetingManage { } public void uploadMeetingResult(MeetingResultUploadReq req) { - Meeting meeting = meetingService.getById(req.getMeetingId()); - if (meeting == null || MeetingStatusEnum.CANCELED.eq(meeting.getStatus())) { - throw BizException.wrap("会议不存在或已取消"); + String key = "meeting_result_upload:" + req.getMeetingId(); + if (!distributedLock.lock(key, RETRY_TIMES)) { + throw BizException.wrap("正在上传会议结果,请勿重复操作"); } - LocalDateTime now = LocalDateTime.now(); - if (meeting.getEndTime().isAfter(now)) { - throw BizException.wrap("会议未结束"); - } - LambdaUpdateWrapper mUpdate = Wrappers.lambdaUpdate(Meeting.class) - .set(Meeting::getUpdateOn, now) - .set(Meeting::getResultDescription, req.getResultDescription()) - .set(Meeting::getResultAttachFiles, req.getResultAttachFiles()) - .set(Meeting::getUpdateBy, LoginUserUtil.getUserId()) - .eq(Meeting::getId, req.getMeetingId()); - meetingService.update(mUpdate); + try { + Meeting meeting = meetingService.getById(req.getMeetingId()); + if (meeting == null || MeetingStatusEnum.CANCELED.eq(meeting.getStatus())) { + throw BizException.wrap("会议不存在或已取消"); + } + LocalDateTime now = LocalDateTime.now(); + if (meeting.getEndTime().isAfter(now)) { + throw BizException.wrap("会议未结束"); + } + LambdaUpdateWrapper mUpdate = Wrappers.lambdaUpdate(Meeting.class) + .set(Meeting::getUpdateOn, now) + .set(Meeting::getResultDescription, req.getResultDescription()) + .set(Meeting::getResultAttachFiles, req.getResultAttachFiles()) + .set(Meeting::getUpdateBy, LoginUserUtil.getUserId()) + .eq(Meeting::getId, req.getMeetingId()); + meetingService.update(mUpdate); + } finally { + distributedLock.releaseLock(key); + } + } + + public List listExpertEval(Long meetingId) { + List experts = meetingExpertService.listAgreedExperts(meetingId); + if (experts.isEmpty()) { + return Collections.emptyList(); + } + Map evaluationIdMap = expertEvaluationService.getExpertEvaluationIdMap(meetingId); + List expertIds = CollUtils.fieldList(experts, MeetingExpert::getExpertId); + Map expertMap = meetingManageHelper.getExpertBasicInfo(expertIds); + return experts.stream().map(w -> { + Long expertId = w.getExpertId(); + ExpertEvalListItemVO item = new ExpertEvalListItemVO(); + BeanUtil.copyProperties(expertMap.get(expertId), item); + item.setEvaluationId(evaluationIdMap.get(expertId)); + return item; + }).collect(Collectors.toList()); } } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/IMeetingExpertEvaluationService.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/IMeetingExpertEvaluationService.java index dc78ee3..0229a3f 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/IMeetingExpertEvaluationService.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/IMeetingExpertEvaluationService.java @@ -8,6 +8,8 @@ import com.hz.pm.api.meeting.entity.domain.MeetingExpert; import com.hz.pm.api.meeting.entity.domain.MeetingExpertEvaluation; import java.util.Collection; +import java.util.List; +import java.util.Map; /** *

@@ -23,4 +25,8 @@ public interface IMeetingExpertEvaluationService extends IService pageExpertEvaluationTodo(Collection meetingIds, PagePo po); + List listMeetingExpertEvaluations(Long meetingId); + + Map getExpertEvaluationIdMap(Long meetingId); + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertEvaluationServiceImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertEvaluationServiceImpl.java index 582aaf9..fc3487c 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertEvaluationServiceImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertEvaluationServiceImpl.java @@ -1,16 +1,21 @@ package com.hz.pm.api.meeting.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.ningdatech.basic.model.PagePo; import com.hz.pm.api.common.model.entity.CountGroupByDTO; import com.hz.pm.api.meeting.entity.domain.MeetingExpert; import com.hz.pm.api.meeting.entity.domain.MeetingExpertEvaluation; import com.hz.pm.api.meeting.mapper.MeetingExpertEvaluationMapper; import com.hz.pm.api.meeting.service.IMeetingExpertEvaluationService; +import com.ningdatech.basic.model.PagePo; +import com.ningdatech.basic.util.CollUtils; import org.springframework.stereotype.Service; import java.util.Collection; +import java.util.List; +import java.util.Map; /** *

@@ -23,6 +28,12 @@ import java.util.Collection; @Service public class MeetingExpertEvaluationServiceImpl extends ServiceImpl implements IMeetingExpertEvaluationService { + private LambdaQueryWrapper queryByMetingId(Long meetingId) { + return Wrappers.lambdaQuery(MeetingExpertEvaluation.class) + .eq(MeetingExpertEvaluation::getMeetingId, meetingId) + .orderByDesc(MeetingExpertEvaluation::getCreateOn); + } + @Override public Page> listExpertAttendSummary(Collection expertIds, Boolean isAttended, Page> page) { return baseMapper.countExpertAttend(expertIds, isAttended, page); @@ -33,4 +44,17 @@ public class MeetingExpertEvaluationServiceImpl extends ServiceImpl(po.getPageNumber(), po.getPageSize())); } + @Override + public List listMeetingExpertEvaluations(Long meetingId) { + return list(queryByMetingId(meetingId)); + } + + @Override + public Map getExpertEvaluationIdMap(Long meetingId) { + LambdaQueryWrapper query = queryByMetingId(meetingId) + .select(MeetingExpertEvaluation::getId, MeetingExpertEvaluation::getExpertId); + return CollUtils.listToMap(list(query), MeetingExpertEvaluation::getExpertId, + MeetingExpertEvaluation::getId); + } + } diff --git a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertServiceImpl.java b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertServiceImpl.java index 6e58c6f..44c7e23 100644 --- a/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertServiceImpl.java +++ b/hz-pm-api/src/main/java/com/hz/pm/api/meeting/service/impl/MeetingExpertServiceImpl.java @@ -123,7 +123,8 @@ public class MeetingExpertServiceImpl extends ServiceImpl listAgreedExperts(Collection meetingIds) { LambdaQueryWrapper query = Wrappers.lambdaQuery(MeetingExpert.class) .eq(MeetingExpert::getStatus, ExpertAttendStatusEnum.AGREED.getCode()) - .in(MeetingExpert::getMeetingId, meetingIds); + .in(MeetingExpert::getMeetingId, meetingIds) + .orderByAsc(MeetingExpert::getCreateOn); return baseMapper.selectList(query); }