Browse Source

Merge remote-tracking branch 'origin/master'

master
PoffyZhang 1 year ago
parent
commit
5569fd0da1
3 changed files with 34 additions and 37 deletions
  1. +22
    -21
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertInviteManage.java
  2. +10
    -14
      pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java
  3. +2
    -2
      pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java

+ 22
- 21
pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/ExpertInviteManage.java View File

@@ -3,9 +3,9 @@ package com.ningdatech.pmapi.meeting.manage;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.ningdatech.basic.exception.BizException;
import com.ningdatech.basic.util.CollUtils; import com.ningdatech.basic.util.CollUtils;
import com.ningdatech.pmapi.common.util.BizUtils; import com.ningdatech.pmapi.common.util.BizUtils;
import com.ningdatech.pmapi.common.util.StrUtils;
import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum; import com.ningdatech.pmapi.expert.constant.ExpertAccountStatusEnum;
import com.ningdatech.pmapi.expert.entity.ExpertAvoidCompany; import com.ningdatech.pmapi.expert.entity.ExpertAvoidCompany;
import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo; import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo;
@@ -172,8 +172,9 @@ public class ExpertInviteManage {
} }


if (CollUtil.isNotEmpty(avoidCompanyExpertIds)) { if (CollUtil.isNotEmpty(avoidCompanyExpertIds)) {
for (Long avoidCompanyExpertId : avoidCompanyExpertIds) {
expertIdsIn.remove(avoidCompanyExpertId);
expertIdsIn.removeIf(avoidCompanyExpertIds::contains);
if (expertIdsIn.isEmpty()) {
return null;
} }
} }
return expertIdsIn; return expertIdsIn;
@@ -249,8 +250,8 @@ public class ExpertInviteManage {
public ExpertChooseDTO expertInviteByRandomRule(AvoidRuleDTO avoidRule, public ExpertChooseDTO expertInviteByRandomRule(AvoidRuleDTO avoidRule,
RandomInviteRuleDTO randomRule, RandomInviteRuleDTO randomRule,
List<Long> appointExpertIds, List<Long> appointExpertIds,
LocalDateTime start,
LocalDateTime end) {
LocalDateTime sTime,
LocalDateTime eTime) {
ExpertChooseDTO result = new ExpertChooseDTO(new ArrayList<>(), 0); ExpertChooseDTO result = new ExpertChooseDTO(new ArrayList<>(), 0);
List<Long> expertIdsIn = mergeExpertIdsByCondition(randomRule, avoidRule); List<Long> expertIdsIn = mergeExpertIdsByCondition(randomRule, avoidRule);
if (expertIdsIn == null) { if (expertIdsIn == null) {
@@ -287,17 +288,17 @@ public class ExpertInviteManage {
} }
} }
// 过滤掉已参加会议的专家 // 过滤掉已参加会议的专家
List<Long> expertIdsLockByMeeting = expertInviteHelper.listInvitedExpertByTime(start, end);
List<Long> expertIdsLockByMeeting = expertInviteHelper.listInvitedExpertByTime(sTime, eTime);
expertIdsIn.removeIf(expertIdsLockByMeeting::contains); expertIdsIn.removeIf(expertIdsLockByMeeting::contains);
if (expertIdsIn.isEmpty()) { if (expertIdsIn.isEmpty()) {
return result; return result;
} }
query.in(ExpertUserFullInfo::getUserId, expertIdsIn); query.in(ExpertUserFullInfo::getUserId, expertIdsIn);
} else if (avoidExpert || CollUtil.isNotEmpty(appointExpertIds)) { } else if (avoidExpert || CollUtil.isNotEmpty(appointExpertIds)) {
Set<Long> tempExperts = expertInviteHelper.getAvoidExpert(appointExpertIds, avoidRule, start, end);
Set<Long> tempExperts = expertInviteHelper.getAvoidExpert(appointExpertIds, avoidRule, sTime, eTime);
query.notIn(ExpertUserFullInfo::getUserId, tempExperts); query.notIn(ExpertUserFullInfo::getUserId, tempExperts);
} else { } else {
Set<Long> notInUserIds = expertInviteHelper.listExpertLeaveOrInvited(start, end);
Set<Long> notInUserIds = expertInviteHelper.listExpertLeaveOrInvited(sTime, eTime);
if (!notInUserIds.isEmpty()) { if (!notInUserIds.isEmpty()) {
query.notIn(ExpertUserFullInfo::getUserId, notInUserIds); query.notIn(ExpertUserFullInfo::getUserId, notInUserIds);
} }
@@ -307,11 +308,8 @@ public class ExpertInviteManage {
return result; return result;
} }
Map<String, List<ExpertUserFullInfo>> userGroupByUnit = CollUtils.group(userInfoList, ExpertUserFullInfo::getCompanyUniqCode); Map<String, List<ExpertUserFullInfo>> userGroupByUnit = CollUtils.group(userInfoList, ExpertUserFullInfo::getCompanyUniqCode);
result.setTotal(userInfoList.size());
// count为空表示数量校验
if (randomRule.getCount() == null || result.getTotal() >= randomRule.getCount()) {
result.setExperts(inviteGroupByCompany(userGroupByUnit, randomRule.getCount()));
}
result.setTotal(userGroupByUnit.size());
result.setExperts(inviteGroupByCompany(userGroupByUnit, randomRule.getCount()));
return result; return result;
} }


@@ -382,7 +380,7 @@ public class ExpertInviteManage {
List<String> tmpUniqCompanyCodes = CollUtils.fieldList(agreeOrNoticingUserInfos, ExpertUserFullInfo::getCompanyUniqCode); List<String> tmpUniqCompanyCodes = CollUtils.fieldList(agreeOrNoticingUserInfos, ExpertUserFullInfo::getCompanyUniqCode);
notInCompanyUniqCodeList.addAll(tmpUniqCompanyCodes); notInCompanyUniqCodeList.addAll(tmpUniqCompanyCodes);
} }
if (invitedRefused) {
if (!invitedRefused) {
// 拒绝参加的不可以被再次抽中 // 拒绝参加的不可以被再次抽中
List<MeetingExpert> refusedExperts = expertGroupByStatus.get(REFUSED); List<MeetingExpert> refusedExperts = expertGroupByStatus.get(REFUSED);
if (refusedExperts.size() > 0) { if (refusedExperts.size() > 0) {
@@ -526,25 +524,28 @@ public class ExpertInviteManage {
* 专家抽取(会议创建时抽取) * 专家抽取(会议创建时抽取)
* *
* @param randomRules 随机抽取规则 * @param randomRules 随机抽取规则
* @param avoidRuled 回避信息
* @param avoidRule 回避信息
* @param meeting 会议信息 * @param meeting 会议信息
* @author WendyYang * @author WendyYang
**/ **/
public void expertInviteByMeetingCreate(Meeting meeting, public void expertInviteByMeetingCreate(Meeting meeting,
List<RandomInviteRuleDTO> randomRules, List<RandomInviteRuleDTO> randomRules,
AvoidRuleDTO avoidRuled) {
AvoidRuleDTO avoidRule) {
List<MeetingExpert> expertInserts = new ArrayList<>(); List<MeetingExpert> expertInserts = new ArrayList<>();
// 处理随机抽取规则 // 处理随机抽取规则
if (CollectionUtils.isNotEmpty(randomRules)) { if (CollectionUtils.isNotEmpty(randomRules)) {
List<ExpertInviteRule> randoms = new ArrayList<>(); List<ExpertInviteRule> randoms = new ArrayList<>();
List<ExpertChooseDTO> expertsByRandom = new ArrayList<>(); List<ExpertChooseDTO> expertsByRandom = new ArrayList<>();
List<Long> chooseExpertIds = new ArrayList<>(); List<Long> chooseExpertIds = new ArrayList<>();
LocalDateTime startTime = meeting.getStartTime();
LocalDateTime endTime = meeting.getEndTime();
LocalDateTime sTime = meeting.getStartTime();
LocalDateTime eTime = meeting.getEndTime();
randomRules.forEach(rule -> { randomRules.forEach(rule -> {
ExpertChooseDTO tempExperts = expertInviteByRandomRule(avoidRuled, rule, chooseExpertIds, startTime, endTime);
expertsByRandom.add(tempExperts);
chooseExpertIds.addAll(CollUtils.fieldList(tempExperts.getExperts(), ExpertUserFullInfo::getUserId));
ExpertChooseDTO tmpExperts = expertInviteByRandomRule(avoidRule, rule, chooseExpertIds, sTime, eTime);
if (tmpExperts.getTotal() < rule.getCount()) {
throw BizException.wrap("可抽取专家数量不足");
}
expertsByRandom.add(tmpExperts);
chooseExpertIds.addAll(CollUtils.fieldList(tmpExperts.getExperts(), ExpertUserFullInfo::getUserId));
randoms.add(getExpertInviteRule(rule, meeting.getId())); randoms.add(getExpertInviteRule(rule, meeting.getId()));
}); });
inviteRuleService.saveBatch(randoms); inviteRuleService.saveBatch(randoms);


+ 10
- 14
pmapi/src/main/java/com/ningdatech/pmapi/meeting/manage/MeetingManage.java View File

@@ -233,21 +233,12 @@ public class MeetingManage {
AvoidRuleDTO avoidInfo = req.getAvoidRule(); AvoidRuleDTO avoidInfo = req.getAvoidRule();
Assert.notNull(avoidInfo, "回避信息不能为空"); Assert.notNull(avoidInfo, "回避信息不能为空");
// 随机抽取的话则需进行抽取数量校验 // 随机抽取的话则需进行抽取数量校验
ExpertCountOnChangeVO countOnChange = expertCountOnChange(req);
if (!countOnChange.getStatus()) {
throw BizException.wrap(countOnChange.getMessage());
}
for (int i = 0; i < randomRules.size(); i++) {
Integer checkCount = countOnChange.getCountList().get(i);
Integer inviteCount = randomRules.get(i).getCount();
Assert.isTrue(checkCount >= inviteCount, "可供抽取的专家数量不足");
}
expertInviteManage.expertInviteByMeetingCreate(meeting, randomRules, avoidInfo); expertInviteManage.expertInviteByMeetingCreate(meeting, randomRules, avoidInfo);
expertInviteTask.addInviteTaskByMeetingCreate(meeting.getId(), 5); expertInviteTask.addInviteTaskByMeetingCreate(meeting.getId(), 5);
LambdaUpdateWrapper<Meeting> update = Wrappers.lambdaUpdate(Meeting.class);
update.set(Meeting::getInviteStatus, false);
update.eq(Meeting::getId, meeting.getId());
meetingService.update(update);
LambdaUpdateWrapper<Meeting> mUpdate = Wrappers.lambdaUpdate(Meeting.class)
.set(Meeting::getInviteStatus, false)
.eq(Meeting::getId, meeting.getId());
meetingService.update(mUpdate);
// 回避规则 // 回避规则
ExpertInviteAvoidRule avoidRule = new ExpertInviteAvoidRule(); ExpertInviteAvoidRule avoidRule = new ExpertInviteAvoidRule();
avoidRule.setMeetingId(meeting.getId()); avoidRule.setMeetingId(meeting.getId());
@@ -301,9 +292,14 @@ public class MeetingManage {
return resultCount; return resultCount;
} }
List<Long> expertIdsChoose = new ArrayList<>(); List<Long> expertIdsChoose = new ArrayList<>();
for (RandomInviteRuleDTO randomRule : req.getRandomRules()) {
for (int i = 0; i < req.getRandomRules().size(); i++) {
RandomInviteRuleDTO randomRule = req.getRandomRules().get(i);
ExpertChooseDTO chooseExpert = expertInviteManage.expertInviteByRandomRule(req.getAvoidRule(), ExpertChooseDTO chooseExpert = expertInviteManage.expertInviteByRandomRule(req.getAvoidRule(),
randomRule, expertIdsChoose, meeting.getStartTime(), meeting.getEndTime()); randomRule, expertIdsChoose, meeting.getStartTime(), meeting.getEndTime());
if (i < req.getRandomRules().size() - 1 && chooseExpert.getTotal() > 0) {
List<Long> tempUserIds = CollUtils.fieldList(chooseExpert.getExperts(), ExpertUserFullInfo::getUserId);
expertIdsChoose.addAll(tempUserIds);
}
resultCount.addCountList(chooseExpert.getTotal()); resultCount.addCountList(chooseExpert.getTotal());
} }
return resultCount; return resultCount;


+ 2
- 2
pmapi/src/main/java/com/ningdatech/pmapi/projectdeclared/manage/DeclaredProjectManage.java View File

@@ -423,9 +423,9 @@ public class DeclaredProjectManage {
public void exportList(HttpServletResponse response, ProjectListReq param) { public void exportList(HttpServletResponse response, ProjectListReq param) {
UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId()); UserFullInfoDTO user = userInfoHelper.getUserFullInfo(LoginUserUtil.getUserId());
VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!"); VUtils.isTrue(Objects.isNull(user)).throwMessage("获取登录用户失败!");
//放入用户的单位
param.setBuildOrgCode(user.getOrganizationCode());
LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param); LambdaQueryWrapper<Project> query = ProjectHelper.projectQuery(param);
//当非预审申报的时候 是自己单位 当是预审申报的时候 要主管单位
preQuery(query,user);
List<Project> records = projectService.list(query); List<Project> records = projectService.list(query);


AtomicInteger serialNumber = new AtomicInteger(0); AtomicInteger serialNumber = new AtomicInteger(0);


Loading…
Cancel
Save