@@ -16,7 +16,7 @@ import java.util.List; | |||||
*/ | */ | ||||
@Data | @Data | ||||
@AllArgsConstructor | @AllArgsConstructor | ||||
public class ExpertChooseDTO { | |||||
public class ExpertChoseDTO { | |||||
private List<ExpertUserFullInfo> experts; | private List<ExpertUserFullInfo> experts; | ||||
@@ -11,7 +11,7 @@ import lombok.Data; | |||||
* @since 09:24 2023/12/27 | * @since 09:24 2023/12/27 | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class ExpertJudgeTimeLimitContentDTO { | |||||
public class ExpertJudgeTimeLimitDTO { | |||||
private Integer days; | private Integer days; | ||||
@@ -14,7 +14,7 @@ import java.time.LocalTime; | |||||
* @since 00:27 2023/12/27 | * @since 00:27 2023/12/27 | ||||
*/ | */ | ||||
@Data | @Data | ||||
public class InviteCallIgnoreTimeContentDTO { | |||||
public class InviteCallIgnoreTimeDTO { | |||||
@JSONField(format = "HH:mm") | @JSONField(format = "HH:mm") | ||||
private LocalTime startTime; | private LocalTime startTime; |
@@ -1,7 +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 com.hz.pm.api.meeting.entity.dto.ExpertJudgeTimeLimitDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.InviteCallIgnoreTimeDTO; | |||||
import lombok.AllArgsConstructor; | import lombok.AllArgsConstructor; | ||||
import lombok.Getter; | import lombok.Getter; | ||||
@@ -17,9 +17,9 @@ import lombok.Getter; | |||||
@AllArgsConstructor | @AllArgsConstructor | ||||
public enum MeetingSettingsTypeEnum { | public enum MeetingSettingsTypeEnum { | ||||
INVITE_CALL_IGNORE_TIME("专家抽取免打扰时段配置", InviteCallIgnoreTimeContentDTO.class), | |||||
SMS_SEND_IGNORE_TIME("短信发送免打扰时间段", InviteCallIgnoreTimeContentDTO.class), | |||||
EXPERT_JUDGE_TIME_LIMIT("专家星级评分时间配置", ExpertJudgeTimeLimitContentDTO.class); | |||||
INVITE_CALL_IGNORE_TIME("专家抽取免打扰时段配置", InviteCallIgnoreTimeDTO.class), | |||||
SMS_SEND_IGNORE_TIME("短信发送免打扰时间段", InviteCallIgnoreTimeDTO.class), | |||||
EXPERT_JUDGE_TIME_LIMIT("专家星级评分时间配置", ExpertJudgeTimeLimitDTO.class); | |||||
private final String name; | private final String name; | ||||
private final Class<?> contentClass; | private final Class<?> contentClass; | ||||
@@ -1,7 +1,8 @@ | |||||
package com.hz.pm.api.meeting.entity.req; | package com.hz.pm.api.meeting.entity.req; | ||||
import com.hz.pm.api.meeting.entity.dto.InviteCallIgnoreTimeContentDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.ExpertJudgeTimeLimitContentDTO; | |||||
import cn.hutool.core.bean.BeanUtil; | |||||
import com.hz.pm.api.meeting.entity.dto.ExpertJudgeTimeLimitDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.InviteCallIgnoreTimeDTO; | |||||
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; | ||||
import lombok.Data; | import lombok.Data; | ||||
@@ -33,11 +34,15 @@ public class MeetingSettingsSaveReq { | |||||
public static class SettingsContentPackageDTO { | public static class SettingsContentPackageDTO { | ||||
@ApiModelProperty("专家邀请免打扰时段设置") | @ApiModelProperty("专家邀请免打扰时段设置") | ||||
private InviteCallIgnoreTimeContentDTO expertInviteIgnoreTimeContent; | |||||
private InviteCallIgnoreTimeDTO expertInviteIgnoreTime; | |||||
@ApiModelProperty("专家评价时间设置") | @ApiModelProperty("专家评价时间设置") | ||||
private ExpertJudgeTimeLimitContentDTO expertJudgeTimeLimitContent; | |||||
private ExpertJudgeTimeLimitDTO expertJudgeTimeLimit; | |||||
} | } | ||||
public <T> T getSettingsContent(Class<T> tClass) { | |||||
return BeanUtil.toBean(settingsContent, tClass); | |||||
} | |||||
} | } |
@@ -292,21 +292,21 @@ public class ExpertInviteManage { | |||||
* @return 满足抽取条件的专家 | * @return 满足抽取条件的专家 | ||||
* @author WendyYang | * @author WendyYang | ||||
**/ | **/ | ||||
public ExpertChooseDTO expertInviteByRandomRule(AvoidRuleDTO avoidRule, | |||||
RandomInviteRuleDTO randomRule, | |||||
List<Long> invitedExpertIds, | |||||
LocalDateTime sTime, | |||||
LocalDateTime eTime, | |||||
LocalDateTime meetingCreateOn) { | |||||
ExpertChooseDTO result = new ExpertChooseDTO(new ArrayList<>(), 0); | |||||
public ExpertChoseDTO expertInviteByRandomRule(AvoidRuleDTO avoidRule, | |||||
RandomInviteRuleDTO randomRule, | |||||
List<Long> invitedExpertIds, | |||||
LocalDateTime sTime, | |||||
LocalDateTime eTime, | |||||
LocalDateTime meetingCreateOn) { | |||||
ExpertChoseDTO result = new ExpertChoseDTO(new ArrayList<>(), 0); | |||||
MergeExpertIdDTO merge = mergeExpertIdsByCondition(randomRule, avoidRule); | MergeExpertIdDTO merge = mergeExpertIdsByCondition(randomRule, avoidRule); | ||||
if (merge.isSkip()) { | if (merge.isSkip()) { | ||||
return result; | return result; | ||||
} | } | ||||
boolean avoidExpert = CollUtil.isNotEmpty(avoidRule.getExpertIds()); | |||||
boolean avoidCompany = CollUtil.isNotEmpty(avoidRule.getAvoidUnitIdList()); | |||||
boolean hasAvoidExpert = CollUtil.isNotEmpty(avoidRule.getExpertIds()); | |||||
boolean hasAvoidCompany = CollUtil.isNotEmpty(avoidRule.getAvoidUnitIdList()); | |||||
Set<String> avoidCompanyUniqCodes = new HashSet<>(); | Set<String> avoidCompanyUniqCodes = new HashSet<>(); | ||||
if (avoidCompany) { | |||||
if (hasAvoidCompany) { | |||||
avoidCompanyUniqCodes.addAll(avoidRule.getAvoidUnitIdList()); | avoidCompanyUniqCodes.addAll(avoidRule.getAvoidUnitIdList()); | ||||
} | } | ||||
if (CollUtil.isNotEmpty(invitedExpertIds)) { | if (CollUtil.isNotEmpty(invitedExpertIds)) { | ||||
@@ -334,7 +334,7 @@ public class ExpertInviteManage { | |||||
// 处理专家层级 | // 处理专家层级 | ||||
addRegionLimit(query, randomRule); | addRegionLimit(query, randomRule); | ||||
if (!expertIdsIn.isEmpty()) { | if (!expertIdsIn.isEmpty()) { | ||||
if (avoidExpert) { | |||||
if (hasAvoidExpert) { | |||||
expertIdsIn.removeIf(w -> avoidRule.getExpertIds().contains(w)); | expertIdsIn.removeIf(w -> avoidRule.getExpertIds().contains(w)); | ||||
if (expertIdsIn.isEmpty()) { | if (expertIdsIn.isEmpty()) { | ||||
// 字典、标签、履职意向地 筛选出的专家ID移除需要回避的专家ID、如果为空则说明没有符合条件的 | // 字典、标签、履职意向地 筛选出的专家ID移除需要回避的专家ID、如果为空则说明没有符合条件的 | ||||
@@ -353,7 +353,7 @@ public class ExpertInviteManage { | |||||
if (expertIdsIn.isEmpty()) { | if (expertIdsIn.isEmpty()) { | ||||
return result; | return result; | ||||
} | } | ||||
} else if (avoidExpert || CollUtil.isNotEmpty(invitedExpertIds)) { | |||||
} else if (hasAvoidExpert || CollUtil.isNotEmpty(invitedExpertIds)) { | |||||
Set<Long> tmpExpert = expertInviteHelper.getAvoidExpert(invitedExpertIds, avoidRule, sTime, eTime); | Set<Long> tmpExpert = expertInviteHelper.getAvoidExpert(invitedExpertIds, avoidRule, sTime, eTime); | ||||
expertIdsNotIn.addAll(tmpExpert); | expertIdsNotIn.addAll(tmpExpert); | ||||
} else { | } else { | ||||
@@ -405,18 +405,18 @@ public class ExpertInviteManage { | |||||
* @param msTime 会议开始时间 | * @param msTime 会议开始时间 | ||||
* @param meTime 会议结束时间 | * @param meTime 会议结束时间 | ||||
* @param reInvite 邀请已拒绝 | * @param reInvite 邀请已拒绝 | ||||
* @return {@link ExpertChooseDTO} | |||||
* @return {@link ExpertChoseDTO} | |||||
* @author WendyYang | * @author WendyYang | ||||
**/ | **/ | ||||
public ExpertChooseDTO expertReplaceByRandomRule(AvoidRuleDTO avoidRule, | |||||
RandomInviteRuleDTO randomRule, | |||||
Collection<MeetingExpert> invitedExperts, | |||||
Integer count, | |||||
LocalDateTime msTime, | |||||
LocalDateTime meTime, | |||||
LocalDateTime tsTime, | |||||
boolean reInvite) { | |||||
ExpertChooseDTO result = new ExpertChooseDTO(new ArrayList<>(), 0); | |||||
public ExpertChoseDTO expertReplaceByRandomRule(AvoidRuleDTO avoidRule, | |||||
RandomInviteRuleDTO randomRule, | |||||
Collection<MeetingExpert> invitedExperts, | |||||
Integer count, | |||||
LocalDateTime msTime, | |||||
LocalDateTime meTime, | |||||
LocalDateTime tsTime, | |||||
boolean reInvite) { | |||||
ExpertChoseDTO result = new ExpertChoseDTO(new ArrayList<>(), 0); | |||||
// 合并标签、字典 | // 合并标签、字典 | ||||
MergeExpertIdDTO merge = mergeExpertIdsByCondition(randomRule, avoidRule); | MergeExpertIdDTO merge = mergeExpertIdsByCondition(randomRule, avoidRule); | ||||
if (merge.isSkip()) { | if (merge.isSkip()) { | ||||
@@ -466,15 +466,26 @@ public class ExpertInviteManage { | |||||
Map<ExpertAttendStatusEnum, List<MeetingExpert>> expertGroupByStatus = invitedExperts.stream() | Map<ExpertAttendStatusEnum, List<MeetingExpert>> expertGroupByStatus = invitedExperts.stream() | ||||
.collect(Collectors.groupingBy(w -> ExpertAttendStatusEnum.getByCode(w.getStatus()))); | .collect(Collectors.groupingBy(w -> ExpertAttendStatusEnum.getByCode(w.getStatus()))); | ||||
// 回避同单位其他专家 | // 回避同单位其他专家 | ||||
AvoidTypeEnum avoidType = avoidRule.getAvoidType() == null ? AvoidTypeEnum.NONE : AvoidTypeEnum.getByCode(avoidRule.getAvoidType()); | |||||
List<MeetingExpert> agreeOrNoticing = new ArrayList<>(); | List<MeetingExpert> agreeOrNoticing = new ArrayList<>(); | ||||
BizUtils.notEmpty(expertGroupByStatus.get(AGREED), agreeOrNoticing::addAll); | BizUtils.notEmpty(expertGroupByStatus.get(AGREED), agreeOrNoticing::addAll); | ||||
BizUtils.notEmpty(expertGroupByStatus.get(NOTICING), agreeOrNoticing::addAll); | BizUtils.notEmpty(expertGroupByStatus.get(NOTICING), agreeOrNoticing::addAll); | ||||
List<Long> agreeOrNoticingExpertIds = CollUtils.fieldList(agreeOrNoticing, MeetingExpert::getExpertId); | List<Long> agreeOrNoticingExpertIds = CollUtils.fieldList(agreeOrNoticing, MeetingExpert::getExpertId); | ||||
if (!agreeOrNoticingExpertIds.isEmpty()) { | if (!agreeOrNoticingExpertIds.isEmpty()) { | ||||
expertIdsNotIn.addAll(agreeOrNoticingExpertIds); | expertIdsNotIn.addAll(agreeOrNoticingExpertIds); | ||||
List<ExpertUserFullInfo> agreeOrNoticingUserInfos = expertUserFullInfoService.listByUserIds(agreeOrNoticingExpertIds); | |||||
List<String> tmpUniqCompanyCodes = CollUtils.fieldList(agreeOrNoticingUserInfos, ExpertUserFullInfo::getCompanyUniqCode); | |||||
notInCompanyUniqCodeList.addAll(tmpUniqCompanyCodes); | |||||
if (AvoidTypeEnum.CURR_UNIT.equals(avoidType)) { | |||||
List<ExpertUserFullInfo> agreeOrNoticingUserInfos = expertUserFullInfoService.listByUserIds(agreeOrNoticingExpertIds); | |||||
List<String> tmpUniqCompanyCodes = CollUtils.fieldList(agreeOrNoticingUserInfos, ExpertUserFullInfo::getCompanyUniqCode); | |||||
notInCompanyUniqCodeList.addAll(tmpUniqCompanyCodes); | |||||
} else if (AvoidTypeEnum.CURR_STRIP.equals(avoidType)) { | |||||
List<ExpertGovBusinessStrip> expertStrips = expertGovBusinessStripService.listByUserIds(agreeOrNoticingExpertIds); | |||||
if (CollUtil.isNotEmpty(expertStrips)) { | |||||
List<String> businessStripCodes = CollUtils.fieldList(expertStrips, ExpertGovBusinessStrip::getBusinessStripCode); | |||||
query.notExists("select 1 from expert_gov_business_strip egbs " + | |||||
"where egbs.expertUserId = nd_expert_user_full_info.user_id " + | |||||
"and egbs.business_strip_code in " + BizUtils.inSqlJoin(businessStripCodes)); | |||||
} | |||||
} | |||||
} | } | ||||
// 已请假的专家不再抽取 | // 已请假的专家不再抽取 | ||||
List<MeetingExpert> expertsOnLeave = expertGroupByStatus.get(ON_LEAVE); | List<MeetingExpert> expertsOnLeave = expertGroupByStatus.get(ON_LEAVE); | ||||
@@ -513,15 +524,14 @@ public class ExpertInviteManage { | |||||
if (userFullInfos.isEmpty()) { | if (userFullInfos.isEmpty()) { | ||||
return result; | return result; | ||||
} | } | ||||
AvoidTypeEnum avoidType = avoidRule.getAvoidType() == null ? AvoidTypeEnum.CURR_UNIT : AvoidTypeEnum.getByCode(avoidRule.getAvoidType()); | |||||
switch (avoidType) { | switch (avoidType) { | ||||
case NONE: | case NONE: | ||||
result.setExperts(inviteWithoutCompany(userFullInfos, expertsByRecentMeeting(), randomRule.getCount())); | |||||
result.setExperts(inviteWithoutCompany(userFullInfos, expertsByRecentMeeting(), count)); | |||||
result.setTotal(userFullInfos.size()); | result.setTotal(userFullInfos.size()); | ||||
break; | break; | ||||
case CURR_UNIT: | case CURR_UNIT: | ||||
Map<String, List<ExpertUserFullInfo>> unitGroup = CollUtils.group(userFullInfos, ExpertUserFullInfo::getCompanyUniqCode); | Map<String, List<ExpertUserFullInfo>> unitGroup = CollUtils.group(userFullInfos, ExpertUserFullInfo::getCompanyUniqCode); | ||||
result.setExperts(inviteGroupByUnit(unitGroup, expertsByRecentMeeting(), randomRule.getCount())); | |||||
result.setExperts(inviteGroupByUnit(unitGroup, expertsByRecentMeeting(), count)); | |||||
result.setTotal(unitGroup.size()); | result.setTotal(unitGroup.size()); | ||||
break; | break; | ||||
case CURR_STRIP: | case CURR_STRIP: | ||||
@@ -529,7 +539,7 @@ public class ExpertInviteManage { | |||||
List<ExpertGovBusinessStrip> expertStrips = expertGovBusinessStripService.listByUserIds(userIds); | List<ExpertGovBusinessStrip> expertStrips = expertGovBusinessStripService.listByUserIds(userIds); | ||||
if (!expertStrips.isEmpty()) { | if (!expertStrips.isEmpty()) { | ||||
Map<String, List<ExpertGovBusinessStrip>> stripGroup = CollUtils.group(expertStrips, ExpertGovBusinessStrip::getBusinessStripCode); | Map<String, List<ExpertGovBusinessStrip>> stripGroup = CollUtils.group(expertStrips, ExpertGovBusinessStrip::getBusinessStripCode); | ||||
result.setExperts(inviteGroupByStrip(stripGroup, userFullInfos, expertsByRecentMeeting(), randomRule.getCount())); | |||||
result.setExperts(inviteGroupByStrip(stripGroup, userFullInfos, expertsByRecentMeeting(), count)); | |||||
result.setTotal(stripGroup.size()); | result.setTotal(stripGroup.size()); | ||||
} else { | } else { | ||||
result.setTotal(0); | result.setTotal(0); | ||||
@@ -573,13 +583,13 @@ public class ExpertInviteManage { | |||||
// 处理随机抽取规则 | // 处理随机抽取规则 | ||||
if (CollUtil.isNotEmpty(randomRules)) { | if (CollUtil.isNotEmpty(randomRules)) { | ||||
List<ExpertInviteRule> randoms = new ArrayList<>(); | List<ExpertInviteRule> randoms = new ArrayList<>(); | ||||
List<ExpertChooseDTO> expertsByRandom = new ArrayList<>(); | |||||
List<ExpertChoseDTO> expertsByRandom = new ArrayList<>(); | |||||
List<Long> chooseExpertIds = new ArrayList<>(); | List<Long> chooseExpertIds = new ArrayList<>(); | ||||
LocalDateTime sTime = meeting.getStartTime(); | LocalDateTime sTime = meeting.getStartTime(); | ||||
LocalDateTime eTime = meeting.getEndTime(); | LocalDateTime eTime = meeting.getEndTime(); | ||||
LocalDateTime createOn = meeting.getCreateOn(); | LocalDateTime createOn = meeting.getCreateOn(); | ||||
randomRules.forEach(rule -> { | randomRules.forEach(rule -> { | ||||
ExpertChooseDTO tmpExperts = expertInviteByRandomRule(avoidRule, rule, chooseExpertIds, sTime, eTime, createOn); | |||||
ExpertChoseDTO tmpExperts = expertInviteByRandomRule(avoidRule, rule, chooseExpertIds, sTime, eTime, createOn); | |||||
if (tmpExperts.getTotal() < rule.getCount()) { | if (tmpExperts.getTotal() < rule.getCount()) { | ||||
throw BizException.wrap("可抽取专家数量不足"); | throw BizException.wrap("可抽取专家数量不足"); | ||||
} | } | ||||
@@ -2,7 +2,6 @@ package com.hz.pm.api.meeting.manage; | |||||
import cn.hutool.core.bean.BeanUtil; | import cn.hutool.core.bean.BeanUtil; | ||||
import cn.hutool.core.collection.CollUtil; | import cn.hutool.core.collection.CollUtil; | ||||
import cn.hutool.core.map.MapUtil; | |||||
import cn.hutool.core.util.ObjectUtil; | import cn.hutool.core.util.ObjectUtil; | ||||
import cn.hutool.core.util.StrUtil; | import cn.hutool.core.util.StrUtil; | ||||
import cn.hutool.crypto.SecureUtil; | import cn.hutool.crypto.SecureUtil; | ||||
@@ -301,7 +300,7 @@ public class MeetingManage { | |||||
List<Long> expertIdsChoose = new ArrayList<>(); | List<Long> expertIdsChoose = new ArrayList<>(); | ||||
for (int i = 0; i < req.getRandomRules().size(); i++) { | for (int i = 0; i < req.getRandomRules().size(); i++) { | ||||
RandomInviteRuleDTO randomRule = req.getRandomRules().get(i); | RandomInviteRuleDTO randomRule = req.getRandomRules().get(i); | ||||
ExpertChooseDTO chooseExpert = expertInviteManage.expertInviteByRandomRule(req.getAvoidRule(), | |||||
ExpertChoseDTO chooseExpert = expertInviteManage.expertInviteByRandomRule(req.getAvoidRule(), | |||||
randomRule, expertIdsChoose, meeting.getStartTime(), meeting.getEndTime(), meeting.getCreateOn()); | randomRule, expertIdsChoose, meeting.getStartTime(), meeting.getEndTime(), meeting.getCreateOn()); | ||||
if (i < req.getRandomRules().size() - 1 && chooseExpert.getTotal() > 0) { | if (i < req.getRandomRules().size() - 1 && chooseExpert.getTotal() > 0) { | ||||
List<Long> tempUserIds = CollUtils.fieldList(chooseExpert.getExperts(), ExpertUserFullInfo::getUserId); | List<Long> tempUserIds = CollUtils.fieldList(chooseExpert.getExperts(), ExpertUserFullInfo::getUserId); | ||||
@@ -8,19 +8,20 @@ import com.hz.pm.api.common.util.SpringContextHolder; | |||||
import com.hz.pm.api.meeting.builder.ExpertInviteBuilder; | import com.hz.pm.api.meeting.builder.ExpertInviteBuilder; | ||||
import com.hz.pm.api.meeting.entity.domain.Meeting; | import com.hz.pm.api.meeting.entity.domain.Meeting; | ||||
import com.hz.pm.api.meeting.entity.domain.MeetingExpert; | import com.hz.pm.api.meeting.entity.domain.MeetingExpert; | ||||
import com.hz.pm.api.meeting.entity.dto.AvoidRuleDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.ExpertChooseDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.InviteCacheDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.RandomInviteRuleDTO; | |||||
import com.hz.pm.api.meeting.entity.dto.*; | |||||
import com.hz.pm.api.meeting.entity.enumeration.ExpertAttendStatusEnum; | import com.hz.pm.api.meeting.entity.enumeration.ExpertAttendStatusEnum; | ||||
import com.hz.pm.api.meeting.entity.enumeration.MeetingSettingsTypeEnum; | |||||
import com.hz.pm.api.meeting.entity.req.ConfirmedRosterReq; | import com.hz.pm.api.meeting.entity.req.ConfirmedRosterReq; | ||||
import com.hz.pm.api.meeting.entity.req.MeetingSettingsSaveReq; | |||||
import com.hz.pm.api.meeting.helper.MeetingNotifyHelper; | import com.hz.pm.api.meeting.helper.MeetingNotifyHelper; | ||||
import com.hz.pm.api.meeting.manage.ExpertInviteManage; | import com.hz.pm.api.meeting.manage.ExpertInviteManage; | ||||
import com.hz.pm.api.meeting.manage.MeetingManage; | import com.hz.pm.api.meeting.manage.MeetingManage; | ||||
import com.hz.pm.api.meeting.manage.MeetingSettingsManage; | |||||
import com.hz.pm.api.meeting.service.IExpertInviteAvoidRuleService; | import com.hz.pm.api.meeting.service.IExpertInviteAvoidRuleService; | ||||
import com.hz.pm.api.meeting.service.IExpertInviteRuleService; | import com.hz.pm.api.meeting.service.IExpertInviteRuleService; | ||||
import com.hz.pm.api.meeting.service.IMeetingExpertService; | import com.hz.pm.api.meeting.service.IMeetingExpertService; | ||||
import com.hz.pm.api.meeting.service.IMeetingService; | import com.hz.pm.api.meeting.service.IMeetingService; | ||||
import com.hz.pm.api.sms.utils.DateUtil; | |||||
import com.ningdatech.basic.util.CollUtils; | import com.ningdatech.basic.util.CollUtils; | ||||
import com.ningdatech.basic.util.SpringUtils; | import com.ningdatech.basic.util.SpringUtils; | ||||
import com.ningdatech.cache.model.cache.CacheHashKey; | import com.ningdatech.cache.model.cache.CacheHashKey; | ||||
@@ -73,7 +74,7 @@ public class ExpertRandomInviteTask { | |||||
private final ExpertInviteManage expertInviteManage; | private final ExpertInviteManage expertInviteManage; | ||||
private final IExpertInviteAvoidRuleService inviteAvoidRuleService; | private final IExpertInviteAvoidRuleService inviteAvoidRuleService; | ||||
private final MeetingNotifyHelper meetingNotifyHelper; | private final MeetingNotifyHelper meetingNotifyHelper; | ||||
private final MeetingSettingsManage meetingSettingsManage; | |||||
/** | /** | ||||
* 用来存入线程执行句柄, 停止定时任务时使用 | * 用来存入线程执行句柄, 停止定时任务时使用 | ||||
*/ | */ | ||||
@@ -85,9 +86,15 @@ public class ExpertRandomInviteTask { | |||||
} | } | ||||
private boolean inInviteTimeRange() { | private boolean inInviteTimeRange() { | ||||
int currHour = LocalTime.now().getHour(); | |||||
return currHour >= properties.getInviteStartHour() | |||||
&& currHour < properties.getInviteEndHour(); | |||||
MeetingSettingsSaveReq settings = meetingSettingsManage.getSettings(MeetingSettingsTypeEnum.INVITE_CALL_IGNORE_TIME); | |||||
LocalTime currTime = LocalTime.now(); | |||||
if (settings != null) { | |||||
InviteCallIgnoreTimeDTO content = settings.getSettingsContent(InviteCallIgnoreTimeDTO.class); | |||||
return DateUtil.between(currTime, content.getStartTime(), content.getStopTime()); | |||||
} else { | |||||
int currHour = currTime.getHour(); | |||||
return currHour >= properties.getInviteStartHour() && currHour < properties.getInviteEndHour(); | |||||
} | |||||
} | } | ||||
@PostConstruct | @PostConstruct | ||||
@@ -231,7 +238,8 @@ public class ExpertRandomInviteTask { | |||||
return; | return; | ||||
} | } | ||||
Meeting meeting = meetingService.getById(meetingId); | Meeting meeting = meetingService.getById(meetingId); | ||||
if (meeting.getInviteStatus() || meeting.getStartTime().isBefore(LocalDateTime.now())) { | |||||
if (Boolean.TRUE.equals(meeting.getInviteStatus()) | |||||
|| meeting.getStartTime().isBefore(LocalDateTime.now())) { | |||||
log.info("会议已开始停止抽取:{}", meeting); | log.info("会议已开始停止抽取:{}", meeting); | ||||
killTaskAndDelCacheMeetingId(meetingId); | killTaskAndDelCacheMeetingId(meetingId); | ||||
return; | return; | ||||
@@ -259,7 +267,7 @@ public class ExpertRandomInviteTask { | |||||
return; | return; | ||||
} | } | ||||
int needInviteCnt = value.getCount() - wouldAttendCnt; | int needInviteCnt = value.getCount() - wouldAttendCnt; | ||||
ExpertChooseDTO expertChoose = expertInviteManage.expertReplaceByRandomRule(avoidRule, value, | |||||
ExpertChoseDTO expertChoose = expertInviteManage.expertReplaceByRandomRule(avoidRule, value, | |||||
tmpExperts, needInviteCnt, msTime, meTime, tsTime, reInvite); | tmpExperts, needInviteCnt, msTime, meTime, tsTime, reInvite); | ||||
if (expertChoose.getTotal() > 0) { | if (expertChoose.getTotal() > 0) { | ||||