@@ -46,7 +46,7 @@ public class GeneratorCodeKingbaseConfig { | |||||
path + "/com/ningdatech/pmapi/" + packageName + "/mapper")); | path + "/com/ningdatech/pmapi/" + packageName + "/mapper")); | ||||
}) | }) | ||||
.strategyConfig(builder -> { | .strategyConfig(builder -> { | ||||
builder.addTablePrefix("wflow"); | |||||
builder.addTablePrefix(""); | |||||
// 设置需要生成的表名 | // 设置需要生成的表名 | ||||
builder.addInclude(tableNames); | builder.addInclude(tableNames); | ||||
}) | }) | ||||
@@ -56,7 +56,7 @@ public class GeneratorCodeKingbaseConfig { | |||||
} | } | ||||
public static void main(String[] args) { | public static void main(String[] args) { | ||||
generate("Liuxinxin", "expert", PATH_LXX, "expert_avoid_company"); | |||||
generate("WendyYang", "meeting", PATH_YYD, "meeting_inner_project","meeting_outer_project"); | |||||
} | } | ||||
} | } |
@@ -4,7 +4,6 @@ package com.ningdatech.pmapi.meeting.controller; | |||||
import com.ningdatech.basic.model.IdVo; | import com.ningdatech.basic.model.IdVo; | ||||
import com.ningdatech.basic.model.PageVo; | import com.ningdatech.basic.model.PageVo; | ||||
import com.ningdatech.log.annotation.WebLog; | import com.ningdatech.log.annotation.WebLog; | ||||
import com.ningdatech.pmapi.meeting.entity.dto.MeetingBasicDTO; | |||||
import com.ningdatech.pmapi.meeting.entity.req.*; | import com.ningdatech.pmapi.meeting.entity.req.*; | ||||
import com.ningdatech.pmapi.meeting.entity.vo.*; | import com.ningdatech.pmapi.meeting.entity.vo.*; | ||||
import com.ningdatech.pmapi.meeting.manage.MeetingManage; | import com.ningdatech.pmapi.meeting.manage.MeetingManage; | ||||
@@ -33,15 +32,15 @@ public class MeetingController { | |||||
private final MeetingManage meetingManage; | private final MeetingManage meetingManage; | ||||
@PostMapping("/save") | |||||
@ApiOperation("新建会议") | |||||
@PostMapping("/create") | |||||
@ApiOperation(value = "新建会议") | |||||
@WebLog(value = "新建会议") | @WebLog(value = "新建会议") | ||||
public IdVo<Long> meetingCreate(@Valid @RequestBody MeetingCreateReq req) { | public IdVo<Long> meetingCreate(@Valid @RequestBody MeetingCreateReq req) { | ||||
return meetingManage.save(req); | |||||
return meetingManage.meetingCreateAndInviteExpert(req); | |||||
} | } | ||||
@PostMapping("/expertInviteByCreate") | @PostMapping("/expertInviteByCreate") | ||||
@ApiOperation("新建会议-专家抽取") | |||||
@ApiOperation(value = "新建会议-专家抽取", hidden = true) | |||||
@WebLog(value = "新建会议-专家抽取") | @WebLog(value = "新建会议-专家抽取") | ||||
public void expertInviteByCreate(@Valid @RequestBody ExpertInviteReq po) { | public void expertInviteByCreate(@Valid @RequestBody ExpertInviteReq po) { | ||||
meetingManage.expertInviteByCreate(po); | meetingManage.expertInviteByCreate(po); | ||||
@@ -53,7 +52,7 @@ public class MeetingController { | |||||
return meetingManage.expertCountOnChange(po); | return meetingManage.expertCountOnChange(po); | ||||
} | } | ||||
@ApiOperation("专家抽取员事务列表") | |||||
@ApiOperation("专家抽取员会议列表") | |||||
@GetMapping("/meetingListByManager") | @GetMapping("/meetingListByManager") | ||||
@WebLog(value = "专家抽取员事务列表") | @WebLog(value = "专家抽取员事务列表") | ||||
public PageVo<MeetingByManagerVO> meetingListByManager(MeetingListReq po) { | public PageVo<MeetingByManagerVO> meetingListByManager(MeetingListReq po) { | ||||
@@ -74,21 +73,6 @@ public class MeetingController { | |||||
return meetingManage.getMeetingBasicInfo(meetingId); | return meetingManage.getMeetingBasicInfo(meetingId); | ||||
} | } | ||||
@ApiOperation("会议结果上传") | |||||
@PostMapping("/uploadMeetingResult") | |||||
@WebLog(value = "会议结果上传") | |||||
public void uploadMeetingResult(@Valid @RequestBody MeetingResultReq po) { | |||||
meetingManage.uploadMeetingResult(po); | |||||
} | |||||
@ApiOperation("会议结果详情") | |||||
@GetMapping("/detail/{meetingId}/meetingResult") | |||||
@WebLog(value = "会议结果详情况") | |||||
public MeetingResultVO meetingResultDetail(@PathVariable Long meetingId) { | |||||
return meetingManage.meetingResultDetail(meetingId); | |||||
} | |||||
@ApiOperation("邀请情况详情") | @ApiOperation("邀请情况详情") | ||||
@GetMapping("/detail/{meetingId}/inviteDetail") | @GetMapping("/detail/{meetingId}/inviteDetail") | ||||
@WebLog(value = "邀请情况详请") | @WebLog(value = "邀请情况详请") | ||||
@@ -0,0 +1,20 @@ | |||||
package com.ningdatech.pmapi.meeting.controller; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.stereotype.Controller; | |||||
/** | |||||
* <p> | |||||
* 会议评审内部项目表 前端控制器 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
@Controller | |||||
@RequestMapping("/pmapi.meeting/meeting-inner-project") | |||||
public class MeetingInnerProjectController { | |||||
} |
@@ -0,0 +1,20 @@ | |||||
package com.ningdatech.pmapi.meeting.controller; | |||||
import org.springframework.web.bind.annotation.RequestMapping; | |||||
import org.springframework.stereotype.Controller; | |||||
/** | |||||
* <p> | |||||
* 会议评审外部项目 前端控制器 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
@Controller | |||||
@RequestMapping("/pmapi.meeting/meeting-outer-project") | |||||
public class MeetingOuterProjectController { | |||||
} |
@@ -0,0 +1,37 @@ | |||||
package com.ningdatech.pmapi.meeting.entity.domain; | |||||
import com.baomidou.mybatisplus.annotation.IdType; | |||||
import com.baomidou.mybatisplus.annotation.TableId; | |||||
import com.baomidou.mybatisplus.annotation.TableName; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.io.Serializable; | |||||
/** | |||||
* <p> | |||||
* 会议评审内部项目表 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
@Data | |||||
@TableName("meeting_inner_project") | |||||
@ApiModel(value = "MeetingInnerProject对象", description = "会议评审内部项目表") | |||||
public class MeetingInnerProject implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("会议ID") | |||||
private Long meetingId; | |||||
@ApiModelProperty("项目ID") | |||||
private Long projectId; | |||||
} |
@@ -0,0 +1,61 @@ | |||||
package com.ningdatech.pmapi.meeting.entity.domain; | |||||
import com.baomidou.mybatisplus.annotation.*; | |||||
import io.swagger.annotations.ApiModel; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
import java.io.Serializable; | |||||
import java.math.BigDecimal; | |||||
import java.time.LocalDateTime; | |||||
/** | |||||
* <p> | |||||
* 会议评审外部项目 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
@Data | |||||
@TableName("meeting_outer_project") | |||||
@ApiModel(value = "MeetingOuterProject对象", description = "会议评审外部项目") | |||||
public class MeetingOuterProject implements Serializable { | |||||
private static final long serialVersionUID = 1L; | |||||
@ApiModelProperty("主键") | |||||
@TableId(type = IdType.AUTO) | |||||
private Long id; | |||||
@ApiModelProperty("项目名称") | |||||
private String projectName; | |||||
@ApiModelProperty("申报单位") | |||||
private String buildOrg; | |||||
@ApiModelProperty("项目类型") | |||||
private String projectType; | |||||
@ApiModelProperty("预算年度") | |||||
private Integer projectYear; | |||||
@ApiModelProperty("申报金额") | |||||
private BigDecimal declareAmount; | |||||
@ApiModelProperty("会议ID") | |||||
private Long meetingId; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private Long createBy; | |||||
@TableField(fill = FieldFill.INSERT) | |||||
private LocalDateTime createOn; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private Long updateBy; | |||||
@TableField(fill = FieldFill.INSERT_UPDATE) | |||||
private LocalDateTime updateOn; | |||||
} |
@@ -8,6 +8,7 @@ import lombok.Data; | |||||
import javax.validation.constraints.NotEmpty; | import javax.validation.constraints.NotEmpty; | ||||
import javax.validation.constraints.NotNull; | import javax.validation.constraints.NotNull; | ||||
import java.time.LocalDateTime; | import java.time.LocalDateTime; | ||||
import java.util.List; | |||||
/** | /** | ||||
* <p> | * <p> | ||||
@@ -59,4 +60,10 @@ public class MeetingBasicDTO { | |||||
@ApiModelProperty("联系方式") | @ApiModelProperty("联系方式") | ||||
private String contact; | private String contact; | ||||
@ApiModelProperty("内部项目ID") | |||||
private List<Long> projectIdList; | |||||
@ApiModelProperty("外部项目") | |||||
private List<MeetingReviewProjectDTO> projects; | |||||
} | } |
@@ -0,0 +1,32 @@ | |||||
package com.ningdatech.pmapi.meeting.entity.dto; | |||||
import io.swagger.annotations.ApiModelProperty; | |||||
import lombok.Data; | |||||
/** | |||||
* <p> | |||||
* MeetingEvalProjectDTO | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 17:18 2023/2/28 | |||||
*/ | |||||
@Data | |||||
public class MeetingReviewProjectDTO { | |||||
@ApiModelProperty("项目名称") | |||||
private String projectName; | |||||
@ApiModelProperty("预算年度") | |||||
private Integer projectYear; | |||||
@ApiModelProperty("项目类型") | |||||
private String projectType; | |||||
@ApiModelProperty("申报金额") | |||||
private String declareAmount; | |||||
@ApiModelProperty("申报单位") | |||||
private String buildOrg; | |||||
} |
@@ -87,26 +87,12 @@ public class ExpertInviteHelper { | |||||
return expertIds; | return expertIds; | ||||
} | } | ||||
public Map<Long, ExpertUserFullInfo> checkAppointExpert(AppointInviteRuleDTO appointRule, AvoidInfoDTO avoidRule) { | |||||
public Map<Long, ExpertUserFullInfo> checkAppointExpert(AppointInviteRuleDTO appointRule) { | |||||
if (appointRule == null) { | if (appointRule == null) { | ||||
return Collections.emptyMap(); | return Collections.emptyMap(); | ||||
} | } | ||||
List<ExpertUserFullInfo> expertInfos = expertUserFullInfoService.listByUserId(appointRule.getExpertIds()); | List<ExpertUserFullInfo> expertInfos = expertUserFullInfoService.listByUserId(appointRule.getExpertIds()); | ||||
Map<Long, ExpertUserFullInfo> infoMap = CollUtils.listToMap(expertInfos, ExpertUserFullInfo::getUserId); | |||||
if (avoidRule == null) { | |||||
return infoMap; | |||||
} | |||||
infoMap.forEach((key, userFullInfo) -> { | |||||
if (CollectionUtils.isNotEmpty(avoidRule.getExpertIds())) { | |||||
boolean contains = avoidRule.getExpertIds().contains(key); | |||||
Assert.isTrue(!contains, "已回避的专家不可被指定邀请"); | |||||
} | |||||
if (CollUtil.isNotEmpty(avoidRule.getAvoidUnitIdList())) { | |||||
boolean contains = avoidRule.getAvoidUnitIdList().contains(userFullInfo.getCompany()); | |||||
Assert.isTrue(!contains, "回避单位的专家不可出现在指定邀请名单中"); | |||||
} | |||||
}); | |||||
return infoMap; | |||||
return CollUtils.listToMap(expertInfos, ExpertUserFullInfo::getUserId); | |||||
} | } | ||||
/** | /** | ||||
@@ -15,6 +15,7 @@ import com.ningdatech.pmapi.meeting.entity.domain.Meeting; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert; | import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert; | ||||
import com.ningdatech.pmapi.meeting.entity.dto.AvoidInfoDTO; | import com.ningdatech.pmapi.meeting.entity.dto.AvoidInfoDTO; | ||||
import com.ningdatech.pmapi.meeting.entity.dto.MeetingAndAttendStatusDTO; | import com.ningdatech.pmapi.meeting.entity.dto.MeetingAndAttendStatusDTO; | ||||
import com.ningdatech.pmapi.meeting.entity.dto.MeetingBasicDTO; | |||||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatus; | import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatus; | ||||
import com.ningdatech.pmapi.meeting.entity.enumeration.MeetingStatus; | import com.ningdatech.pmapi.meeting.entity.enumeration.MeetingStatus; | ||||
import com.ningdatech.pmapi.meeting.entity.req.MeetingListReq; | import com.ningdatech.pmapi.meeting.entity.req.MeetingListReq; | ||||
@@ -49,6 +50,14 @@ public class MeetingManageHelper { | |||||
private final IExpertInviteRuleService inviteRuleService; | private final IExpertInviteRuleService inviteRuleService; | ||||
private final IExpertInviteAvoidRuleService inviteAvoidRuleService; | private final IExpertInviteAvoidRuleService inviteAvoidRuleService; | ||||
public void checkReviewProject(MeetingBasicDTO meetingBasic) { | |||||
if (meetingBasic.getIsInnerProject()) { | |||||
Assert.notEmpty(meetingBasic.getProjectIdList(), "评审项目不能为空"); | |||||
} else { | |||||
Assert.notEmpty(meetingBasic.getProjects(), "评审项目不能为空"); | |||||
} | |||||
} | |||||
/** | /** | ||||
* 获取专家出席会议的状态 | * 获取专家出席会议的状态 | ||||
* | * | ||||
@@ -21,10 +21,7 @@ import com.ningdatech.pmapi.expert.entity.ExpertUserFullInfo; | |||||
import com.ningdatech.pmapi.expert.helper.PermissionCheckHelper; | import com.ningdatech.pmapi.expert.helper.PermissionCheckHelper; | ||||
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService; | import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService; | ||||
import com.ningdatech.pmapi.meeting.builder.ExpertInviteBuilder; | import com.ningdatech.pmapi.meeting.builder.ExpertInviteBuilder; | ||||
import com.ningdatech.pmapi.meeting.entity.domain.ExpertInviteAvoidRule; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.ExpertInviteRule; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.Meeting; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingExpert; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.*; | |||||
import com.ningdatech.pmapi.meeting.entity.dto.*; | import com.ningdatech.pmapi.meeting.entity.dto.*; | ||||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatus; | import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatus; | ||||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertInviteTypeEnum; | import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertInviteTypeEnum; | ||||
@@ -36,10 +33,7 @@ import com.ningdatech.pmapi.meeting.entity.vo.ExpertInviteDetailVO.RandomInviteL | |||||
import com.ningdatech.pmapi.meeting.helper.ExpertInviteHelper; | import com.ningdatech.pmapi.meeting.helper.ExpertInviteHelper; | ||||
import com.ningdatech.pmapi.meeting.helper.MeetingManageHelper; | import com.ningdatech.pmapi.meeting.helper.MeetingManageHelper; | ||||
import com.ningdatech.pmapi.meeting.helper.YxtCallOrSmsHelper; | import com.ningdatech.pmapi.meeting.helper.YxtCallOrSmsHelper; | ||||
import com.ningdatech.pmapi.meeting.service.IExpertInviteAvoidRuleService; | |||||
import com.ningdatech.pmapi.meeting.service.IExpertInviteRuleService; | |||||
import com.ningdatech.pmapi.meeting.service.IMeetingExpertService; | |||||
import com.ningdatech.pmapi.meeting.service.IMeetingService; | |||||
import com.ningdatech.pmapi.meeting.service.*; | |||||
import com.ningdatech.pmapi.meeting.task.ExpertInviteTask; | import com.ningdatech.pmapi.meeting.task.ExpertInviteTask; | ||||
import com.ningdatech.pmapi.meta.helper.DictionaryCache; | import com.ningdatech.pmapi.meta.helper.DictionaryCache; | ||||
import com.ningdatech.pmapi.meta.helper.TagCache; | import com.ningdatech.pmapi.meta.helper.TagCache; | ||||
@@ -85,6 +79,8 @@ public class MeetingManage { | |||||
private final DistributedLock distributedLock; | private final DistributedLock distributedLock; | ||||
private final PermissionCheckHelper permissionCheckHelper; | private final PermissionCheckHelper permissionCheckHelper; | ||||
private final IUserInfoService userInfoService; | private final IUserInfoService userInfoService; | ||||
private final IMeetingInnerProjectService meetingInnerProjectService; | |||||
private final IMeetingOuterProjectService meetingOuterProjectService; | |||||
private final ExpertInviteHelper expertInviteHelper; | private final ExpertInviteHelper expertInviteHelper; | ||||
private static final String INVITED_RULE_CREATE = "INVITED_RULE_CREATE:"; | private static final String INVITED_RULE_CREATE = "INVITED_RULE_CREATE:"; | ||||
@@ -97,8 +93,9 @@ public class MeetingManage { | |||||
public static final int RETRY_TIMES = 3; | public static final int RETRY_TIMES = 3; | ||||
@Transactional(rollbackFor = Exception.class) | @Transactional(rollbackFor = Exception.class) | ||||
public IdVo<Long> save(MeetingCreateReq req) { | |||||
public IdVo<Long> meetingCreateAndInviteExpert(MeetingCreateReq req) { | |||||
MeetingBasicDTO meetingBasic = req.getMeetingBasicInfo(); | MeetingBasicDTO meetingBasic = req.getMeetingBasicInfo(); | ||||
meetingManageHelper.checkReviewProject(meetingBasic); | |||||
String md5ByParam = SecureUtil.md5(meetingBasic.toString()); | String md5ByParam = SecureUtil.md5(meetingBasic.toString()); | ||||
String key = MEETING_CREATE_KEY + md5ByParam; | String key = MEETING_CREATE_KEY + md5ByParam; | ||||
if (!distributedLock.lock(key, RETRY_TIMES)) { | if (!distributedLock.lock(key, RETRY_TIMES)) { | ||||
@@ -115,6 +112,22 @@ public class MeetingManage { | |||||
meeting.setCreator(userDetail.getUsername()); | meeting.setCreator(userDetail.getUsername()); | ||||
meeting.setInviteStopped(true); | meeting.setInviteStopped(true); | ||||
meetingService.save(meeting); | meetingService.save(meeting); | ||||
if (meetingBasic.getIsInnerProject()) { | |||||
List<MeetingInnerProject> projects = meetingBasic.getProjectIdList().stream().map(w -> { | |||||
MeetingInnerProject project = new MeetingInnerProject(); | |||||
project.setMeetingId(meeting.getId()); | |||||
project.setProjectId(w); | |||||
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); | |||||
} | |||||
// 抽取专家 | // 抽取专家 | ||||
req.getExpertInviteRule().setMeetingId(meeting.getId()); | req.getExpertInviteRule().setMeetingId(meeting.getId()); | ||||
expertInviteByCreate(req.getExpertInviteRule()); | expertInviteByCreate(req.getExpertInviteRule()); | ||||
@@ -131,11 +144,12 @@ public class MeetingManage { | |||||
throw BizException.wrap("不可重复进行专家抽取"); | throw BizException.wrap("不可重复进行专家抽取"); | ||||
} | } | ||||
try { | try { | ||||
AvoidInfoDTO avoidInfo = req.getAvoidRule(); | |||||
Meeting meeting = meetingService.getById(req.getMeetingId()); | Meeting meeting = meetingService.getById(req.getMeetingId()); | ||||
if (ExpertInviteTypeEnum.RANDOM.eq(req.getInviteType())) { | if (ExpertInviteTypeEnum.RANDOM.eq(req.getInviteType())) { | ||||
List<RandomInviteRuleDTO> randomRules = req.getRandomRules(); | List<RandomInviteRuleDTO> randomRules = req.getRandomRules(); | ||||
Assert.notEmpty(randomRules, "随机抽取规则不能为空"); | Assert.notEmpty(randomRules, "随机抽取规则不能为空"); | ||||
AvoidInfoDTO avoidInfo = req.getAvoidRule(); | |||||
Assert.notNull(avoidInfo, "回避信息不能为空"); | |||||
// 随机抽取的话则需进行抽取数量校验 | // 随机抽取的话则需进行抽取数量校验 | ||||
ExpertCountOnChangeVO countOnChange = expertCountOnChange(req); | ExpertCountOnChangeVO countOnChange = expertCountOnChange(req); | ||||
if (!countOnChange.getStatus()) { | if (!countOnChange.getStatus()) { | ||||
@@ -152,11 +166,22 @@ public class MeetingManage { | |||||
update.set(Meeting::getInviteStopped, false); | update.set(Meeting::getInviteStopped, false); | ||||
update.eq(Meeting::getId, meeting.getId()); | update.eq(Meeting::getId, meeting.getId()); | ||||
meetingService.update(update); | meetingService.update(update); | ||||
// 回避规则 | |||||
if (avoidInfo != null) { | |||||
ExpertInviteAvoidRule avoidRule = new ExpertInviteAvoidRule(); | |||||
avoidRule.setMeetingId(meeting.getId()); | |||||
// 未传值时设置为0 表示不限制周参与次数 | |||||
avoidRule.setWeekInviteCount(ObjectUtil.defaultIfNull(avoidRule.getWeekInviteCount(), 0)); | |||||
avoidRule.setAvoidOrgIds(CollUtils.joinByComma(avoidInfo.getAvoidOrgIdList())); | |||||
avoidRule.setAvoidUnitIds(CollUtils.joinByComma(avoidInfo.getAvoidUnitIdList())); | |||||
avoidRule.setExpertIds(CollUtils.joinByComma(avoidInfo.getExpertIds())); | |||||
inviteAvoidRuleService.save(avoidRule); | |||||
} | |||||
} else { | } else { | ||||
// 指定邀请 | // 指定邀请 | ||||
AppointInviteRuleDTO appointRule = req.getAppointRule(); | AppointInviteRuleDTO appointRule = req.getAppointRule(); | ||||
Assert.notNull(appointRule, "指定邀请规则不能为空"); | Assert.notNull(appointRule, "指定邀请规则不能为空"); | ||||
Map<Long, ExpertUserFullInfo> usersMap = expertInviteHelper.checkAppointExpert(appointRule, avoidInfo); | |||||
Map<Long, ExpertUserFullInfo> usersMap = expertInviteHelper.checkAppointExpert(appointRule); | |||||
// 处理指定抽取规则 | // 处理指定抽取规则 | ||||
ExpertInviteRule appoint = getExpertInviteRule(appointRule, meeting.getId()); | ExpertInviteRule appoint = getExpertInviteRule(appointRule, meeting.getId()); | ||||
inviteRuleService.save(appoint); | inviteRuleService.save(appoint); | ||||
@@ -169,17 +194,6 @@ public class MeetingManage { | |||||
}).collect(Collectors.toList()); | }).collect(Collectors.toList()); | ||||
meetingExpertService.saveBatch(experts); | meetingExpertService.saveBatch(experts); | ||||
} | } | ||||
// 回避规则 | |||||
if (avoidInfo != null) { | |||||
ExpertInviteAvoidRule avoidRule = new ExpertInviteAvoidRule(); | |||||
avoidRule.setMeetingId(meeting.getId()); | |||||
// 未传值时设置为0 表示不限制周参与次数 | |||||
avoidRule.setWeekInviteCount(ObjectUtil.defaultIfNull(avoidRule.getWeekInviteCount(), 0)); | |||||
avoidRule.setAvoidOrgIds(CollUtils.joinByComma(avoidInfo.getAvoidOrgIdList())); | |||||
avoidRule.setAvoidUnitIds(CollUtils.joinByComma(avoidInfo.getAvoidUnitIdList())); | |||||
avoidRule.setExpertIds(CollUtils.joinByComma(avoidInfo.getExpertIds())); | |||||
inviteAvoidRuleService.save(avoidRule); | |||||
} | |||||
} finally { | } finally { | ||||
distributedLock.releaseLock(key); | distributedLock.releaseLock(key); | ||||
} | } | ||||
@@ -194,7 +208,7 @@ public class MeetingManage { | |||||
**/ | **/ | ||||
public ExpertCountOnChangeVO expertCountOnChange(ExpertInviteReq req) { | public ExpertCountOnChangeVO expertCountOnChange(ExpertInviteReq req) { | ||||
// 未传递指定邀请专家直接忽略 | // 未传递指定邀请专家直接忽略 | ||||
expertInviteHelper.checkAppointExpert(req.getAppointRule(), req.getAvoidRule()); | |||||
expertInviteHelper.checkAppointExpert(req.getAppointRule()); | |||||
Meeting meeting = meetingService.getById(req.getMeetingId()); | Meeting meeting = meetingService.getById(req.getMeetingId()); | ||||
ExpertCountOnChangeVO resultCount = new ExpertCountOnChangeVO(); | ExpertCountOnChangeVO resultCount = new ExpertCountOnChangeVO(); | ||||
resultCount.setStatus(true); | resultCount.setStatus(true); | ||||
@@ -321,22 +335,6 @@ public class MeetingManage { | |||||
.build(); | .build(); | ||||
} | } | ||||
public void uploadMeetingResult(MeetingResultReq po) { | |||||
LambdaUpdateWrapper<Meeting> updater = Wrappers.lambdaUpdate(Meeting.class) | |||||
.eq(Meeting::getId, po.getMeetingId()) | |||||
.set(Meeting::getStatus, Manager.COMPLETED.getCode()); | |||||
meetingService.update(updater); | |||||
} | |||||
public MeetingResultVO meetingResultDetail(Long meetingId) { | |||||
LambdaQueryWrapper<Meeting> query = Wrappers.lambdaQuery(Meeting.class) | |||||
.eq(Meeting::getId, meetingId); | |||||
MeetingResultVO result = new MeetingResultVO(); | |||||
result.setMeetingId(meetingId); | |||||
return result; | |||||
} | |||||
public ExpertInviteDetailVO inviteDetail(Long meetingId) { | public ExpertInviteDetailVO inviteDetail(Long meetingId) { | ||||
ExpertInviteDetailVO result = new ExpertInviteDetailVO(); | ExpertInviteDetailVO result = new ExpertInviteDetailVO(); | ||||
Meeting meeting = meetingService.getById(meetingId); | Meeting meeting = meetingService.getById(meetingId); | ||||
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.meeting.mapper; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingInnerProject; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
/** | |||||
* <p> | |||||
* 会议评审内部项目表 Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
public interface MeetingInnerProjectMapper extends BaseMapper<MeetingInnerProject> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.meeting.mapper.MeetingInnerProjectMapper"> | |||||
</mapper> |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.meeting.mapper; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingOuterProject; | |||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper; | |||||
/** | |||||
* <p> | |||||
* 会议评审外部项目 Mapper 接口 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
public interface MeetingOuterProjectMapper extends BaseMapper<MeetingOuterProject> { | |||||
} |
@@ -0,0 +1,5 @@ | |||||
<?xml version="1.0" encoding="UTF-8"?> | |||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> | |||||
<mapper namespace="com.ningdatech.pmapi.meeting.mapper.MeetingOuterProjectMapper"> | |||||
</mapper> |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.meeting.service; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingInnerProject; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
/** | |||||
* <p> | |||||
* 会议评审内部项目表 服务类 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
public interface IMeetingInnerProjectService extends IService<MeetingInnerProject> { | |||||
} |
@@ -0,0 +1,16 @@ | |||||
package com.ningdatech.pmapi.meeting.service; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingOuterProject; | |||||
import com.baomidou.mybatisplus.extension.service.IService; | |||||
/** | |||||
* <p> | |||||
* 会议评审外部项目 服务类 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
public interface IMeetingOuterProjectService extends IService<MeetingOuterProject> { | |||||
} |
@@ -0,0 +1,20 @@ | |||||
package com.ningdatech.pmapi.meeting.service.impl; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingInnerProject; | |||||
import com.ningdatech.pmapi.meeting.mapper.MeetingInnerProjectMapper; | |||||
import com.ningdatech.pmapi.meeting.service.IMeetingInnerProjectService; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 会议评审内部项目表 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
@Service | |||||
public class MeetingInnerProjectServiceImpl extends ServiceImpl<MeetingInnerProjectMapper, MeetingInnerProject> implements IMeetingInnerProjectService { | |||||
} |
@@ -0,0 +1,20 @@ | |||||
package com.ningdatech.pmapi.meeting.service.impl; | |||||
import com.ningdatech.pmapi.meeting.entity.domain.MeetingOuterProject; | |||||
import com.ningdatech.pmapi.meeting.mapper.MeetingOuterProjectMapper; | |||||
import com.ningdatech.pmapi.meeting.service.IMeetingOuterProjectService; | |||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; | |||||
import org.springframework.stereotype.Service; | |||||
/** | |||||
* <p> | |||||
* 会议评审外部项目 服务实现类 | |||||
* </p> | |||||
* | |||||
* @author WendyYang | |||||
* @since 2023-02-28 | |||||
*/ | |||||
@Service | |||||
public class MeetingOuterProjectServiceImpl extends ServiceImpl<MeetingOuterProjectMapper, MeetingOuterProject> implements IMeetingOuterProjectService { | |||||
} |