@@ -48,17 +48,26 @@ public class ExpertReviewController { | |||
return expertReviewManage.getExpertReviewDetail(userId, projectId); | |||
} | |||
@GetMapping("/listForGroupLeader/{projectId}/{meetingId}/{userId}") | |||
@GetMapping("/listForGroupLeader/{projectId}/{meetingId}") | |||
@ApiImplicitParams({ | |||
@ApiImplicitParam(name = "userId", value = "专家ID"), | |||
@ApiImplicitParam(name = "projectId", value = "项目ID"), | |||
@ApiImplicitParam(name = "meetingId", value = "会议ID") | |||
}) | |||
@ApiOperation("查看组员评审意见") | |||
public List<ExpertReviewDetailVO> listForGroupLeader(@PathVariable Long userId, | |||
@PathVariable Long meetingId, | |||
public List<ExpertReviewDetailVO> listForGroupLeader(@PathVariable Long meetingId, | |||
@PathVariable Long projectId) { | |||
return expertReviewManage.listForGroupLeader(projectId, meetingId, userId); | |||
return expertReviewManage.listReviews(projectId, meetingId, true); | |||
} | |||
@GetMapping("/list/{projectId}/{meetingId}") | |||
@ApiImplicitParams({ | |||
@ApiImplicitParam(name = "projectId", value = "项目ID"), | |||
@ApiImplicitParam(name = "meetingId", value = "会议ID") | |||
}) | |||
@ApiOperation("查看项目某次会议的所有评审意见") | |||
public List<ExpertReviewDetailVO> list(@PathVariable Long meetingId, | |||
@PathVariable Long projectId) { | |||
return expertReviewManage.listReviews(projectId, meetingId, false); | |||
} | |||
} |
@@ -1,5 +1,6 @@ | |||
package com.ningdatech.pmapi.expert.manage; | |||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.ningdatech.basic.exception.BizException; | |||
import com.ningdatech.file.entity.vo.result.AttachFileVo; | |||
import com.ningdatech.file.service.FileService; | |||
@@ -23,8 +24,13 @@ import com.ningdatech.pmapi.expert.service.ExpertInfoService; | |||
import com.ningdatech.pmapi.expert.service.IExpertUserFullInfoService; | |||
import com.ningdatech.pmapi.meta.constant.DictExpertInfoTypeEnum; | |||
import com.ningdatech.pmapi.meta.model.ExpertRegionInfo; | |||
import com.ningdatech.pmapi.sys.model.entity.Role; | |||
import com.ningdatech.pmapi.sys.model.entity.UserRole; | |||
import com.ningdatech.pmapi.sys.service.IRoleService; | |||
import com.ningdatech.pmapi.sys.service.IUserRoleService; | |||
import com.ningdatech.pmapi.user.constant.UserAvailableEnum; | |||
import com.ningdatech.pmapi.user.entity.UserInfo; | |||
import com.ningdatech.pmapi.user.entity.enumeration.RoleEnum; | |||
import com.ningdatech.pmapi.user.service.IUserInfoService; | |||
import com.ningdatech.pmapi.user.util.LoginUserUtil; | |||
import lombok.RequiredArgsConstructor; | |||
@@ -55,6 +61,8 @@ public class ExpertManage { | |||
private final ExpertUserInfoAssembler expertUserInfoAssembler; | |||
private final IUserInfoService iUserInfoService; | |||
private final ExpertMetaApplyManage expertMetaApplyManage; | |||
private final IUserRoleService iUserRoleService; | |||
private final IRoleService iRoleService; | |||
/** | |||
@@ -108,6 +116,19 @@ public class ExpertManage { | |||
applyResult.setAuditOpinion("同意"); | |||
applyResult.setApplyResult(true); | |||
expertMetaApplyManage.metaApplyResult(applyResult); | |||
// 增加用户专家角色 | |||
Role expertRole = iRoleService.getOne(Wrappers.lambdaQuery(Role.class).eq(Role::getCode, RoleEnum.EXPERT.name())); | |||
UserRole expertUserRole = iUserRoleService.getOne(Wrappers.lambdaQuery(UserRole.class) | |||
.eq(UserRole::getRoleId, expertRole.getId()).eq(UserRole::getUserId,userId)); | |||
if (Objects.isNull(expertUserRole)) { | |||
expertUserRole = new UserRole(); | |||
expertUserRole.setUserId(userId); | |||
expertUserRole.setRoleId(expertRole.getId()); | |||
expertUserRole.setCreateBy(-1L); | |||
expertUserRole.setCreateOn(LocalDateTime.now()); | |||
iUserRoleService.save(expertUserRole); | |||
} | |||
} | |||
@@ -6,18 +6,22 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; | |||
import com.ningdatech.basic.exception.BizException; | |||
import com.ningdatech.basic.util.CollUtils; | |||
import com.ningdatech.cache.lock.DistributedLock; | |||
import com.ningdatech.file.entity.vo.result.AttachFileVo; | |||
import com.ningdatech.file.service.FileService; | |||
import com.ningdatech.pmapi.expert.model.dto.ReviewTemplateOptionDTO; | |||
import com.ningdatech.pmapi.expert.model.entity.ExpertReview; | |||
import com.ningdatech.pmapi.expert.model.req.ExpertReviewDetailReq; | |||
import com.ningdatech.pmapi.expert.model.vo.ExpertReviewDetailVO; | |||
import com.ningdatech.pmapi.expert.service.IExpertReviewService; | |||
import com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatusEnum; | |||
import com.ningdatech.pmapi.meeting.service.IMeetingExpertService; | |||
import com.ningdatech.pmapi.user.util.LoginUserUtil; | |||
import lombok.RequiredArgsConstructor; | |||
import org.springframework.stereotype.Component; | |||
import java.util.Collections; | |||
import java.util.HashMap; | |||
import java.util.List; | |||
import java.util.Map; | |||
import static com.ningdatech.pmapi.meeting.entity.enumeration.ExpertAttendStatusEnum.AGREED; | |||
@@ -36,6 +40,7 @@ public class ExpertReviewManage { | |||
private final IExpertReviewService expertReviewService; | |||
private final DistributedLock distributedLock; | |||
private final IMeetingExpertService meetingExpertService; | |||
private final FileService fileService; | |||
private static final String EXPERT_REVIEW_KEY = "expert_review:"; | |||
@@ -113,14 +118,27 @@ public class ExpertReviewManage { | |||
return buildExpertReviewDetail(reviews.get(0)); | |||
} | |||
public List<ExpertReviewDetailVO> listForGroupLeader(Long projectId, Long meetingId, Long userId) { | |||
public List<ExpertReviewDetailVO> listReviews(Long projectId, Long meetingId, boolean onlyTeamMember) { | |||
LambdaQueryWrapper<ExpertReview> query = Wrappers.lambdaQuery(ExpertReview.class); | |||
query.eq(ExpertReview::getProjectId, projectId); | |||
query.eq(ExpertReview::getMeetingId, meetingId); | |||
query.eq(ExpertReview::getIsFinal, Boolean.FALSE); | |||
query.eq(onlyTeamMember, ExpertReview::getIsFinal, Boolean.FALSE); | |||
query.orderByDesc(ExpertReview::getCreateOn); | |||
List<ExpertReview> reviews = expertReviewService.list(query); | |||
return CollUtils.convert(reviews, this::buildExpertReviewDetail); | |||
if (reviews.isEmpty()) { | |||
return Collections.emptyList(); | |||
} | |||
List<Long> attachFileIds = CollUtils.fieldList(reviews, ExpertReview::getAttachFileId); | |||
Map<Long, AttachFileVo> fileMap = new HashMap<>(attachFileIds.size()); | |||
if (attachFileIds.size() > 0) { | |||
List<AttachFileVo> files = fileService.getByIds(attachFileIds); | |||
files.forEach(w -> fileMap.put(w.getFileId(), w)); | |||
} | |||
return CollUtils.convert(reviews, w -> { | |||
ExpertReviewDetailVO reviewDetail = buildExpertReviewDetail(w); | |||
reviewDetail.setAttachFile(fileMap.get(w.getAttachFileId())); | |||
return reviewDetail; | |||
}); | |||
} | |||
} |
@@ -1,5 +1,6 @@ | |||
package com.ningdatech.pmapi.expert.model.vo; | |||
import com.ningdatech.file.entity.vo.result.AttachFileVo; | |||
import com.ningdatech.pmapi.expert.model.dto.ReviewTemplateOptionDTO; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Builder; | |||
@@ -40,6 +41,9 @@ public class ExpertReviewDetailVO { | |||
@ApiModelProperty("附件ID") | |||
private Long attachFileId; | |||
@ApiModelProperty("附件详情") | |||
private AttachFileVo attachFile; | |||
@ApiModelProperty("评审结果:1 通过、2 需复核、3 不通过") | |||
private Integer reviewResult; | |||
@@ -31,4 +31,7 @@ public class MeetingReviewProjectDTO { | |||
@ApiModelProperty("申报单位") | |||
private String buildOrg; | |||
@ApiModelProperty("评审结果") | |||
private String reviewResult; | |||
} |
@@ -415,6 +415,7 @@ public class MeetingManage { | |||
if (meeting.getIsInnerProject()) { | |||
List<MeetingInnerProject> innerProjects = meetingInnerProjectService.listByMeetingId(meetingId); | |||
List<Project> projects = projectService.listByIds(CollUtils.fieldList(innerProjects, MeetingInnerProject::getProjectId)); | |||
Map<Long, ExpertReview> reviewMap = expertReviewService.listFinalReviewMap(meetingId); | |||
List<MeetingReviewProjectDTO> convert = CollUtils.convert(projects, w -> { | |||
MeetingReviewProjectDTO mrp = new MeetingReviewProjectDTO(); | |||
mrp.setBuildOrg(w.getBuildOrgName()); | |||
@@ -422,6 +423,10 @@ public class MeetingManage { | |||
mrp.setProjectType(w.getProjectType().toString()); | |||
mrp.setProjectYear(w.getProjectYear()); | |||
mrp.setDeclareAmount(w.getDeclareAmount()); | |||
ExpertReview review = reviewMap.get(w.getId()); | |||
if (review != null) { | |||
mrp.setReviewResult(ReviewResultEnum.getByCode(review.getReviewResult()).getValue()); | |||
} | |||
return mrp; | |||
}); | |||
detail.setProjects(convert); | |||
@@ -109,16 +109,26 @@ public class OrganizationManage { | |||
public List<KeyTreeVO> treeRubbishVOList(ReqSynthesizePO request) { | |||
String organizationCode = request.getOrganizationCode(); | |||
String organizationName = request.getOrganizationName(); | |||
List<DingOrganization> dingOrganizationList = new ArrayList<>(); | |||
List<String> organizationCodeList = new ArrayList<>(); | |||
if (StrUtils.isBlank(organizationCode)) { | |||
if (StringUtils.isNotBlank(organizationName)) { | |||
dingOrganizationList = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | |||
.like(DingOrganization::getOrganizationName, organizationName)); | |||
if (dingOrganizationList.size() == 0) { | |||
return new ArrayList<>(); | |||
} | |||
} else if (StrUtils.isBlank(organizationCode)) { | |||
organizationCodeList = dingOrganizationProperties.getDeptVisibleScopes(); | |||
} else { | |||
organizationCodeList = CollectionUtil.toList(organizationCode); | |||
} | |||
dingOrganizationList = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | |||
.in(DingOrganization::getOrganizationCode, organizationCodeList)); | |||
if (CollectionUtil.isEmpty(dingOrganizationList)) { | |||
dingOrganizationList = iDingOrganizationService.list(Wrappers.lambdaQuery(DingOrganization.class) | |||
.in(DingOrganization::getOrganizationCode, organizationCodeList)); | |||
} | |||
List<KeyTreeVO> orgKeyTreeVOList = dingOrganizationList.stream().map(r -> { | |||
KeyTreeVO keyTreeVO = new KeyTreeVO(); | |||
@@ -4,8 +4,6 @@ import io.swagger.annotations.ApiModel; | |||
import io.swagger.annotations.ApiModelProperty; | |||
import lombok.Data; | |||
import javax.validation.constraints.NotBlank; | |||
/** | |||
* @author liuxinxin | |||
* @date 2023/3/28 上午10:11 | |||
@@ -20,4 +18,7 @@ public class ReqSynthesizePO { | |||
@ApiModelProperty("是否需要组织成员列表") | |||
private Boolean needMember = false; | |||
@ApiModelProperty("单位名称") | |||
private String organizationName; | |||
} |
@@ -6,6 +6,7 @@ import java.math.BigDecimal; | |||
import java.time.LocalDateTime; | |||
import java.util.*; | |||
import java.util.stream.Collectors; | |||
import java.util.stream.Stream; | |||
import javax.servlet.http.HttpServletResponse; | |||
@@ -181,15 +182,15 @@ public class TodoCenterManage { | |||
List<ProcessTaskVo> todoList = processTaskService.getUserTodoList(req); | |||
//有退回待办的 | |||
List<ProcessTaskVo> backList = processTaskService.getBackTodoList(req); | |||
todoList.addAll(backList); | |||
todoList.stream().sorted(Comparator.comparing(ProcessTaskVo::getTaskCreateTime).reversed()); | |||
if (CollUtil.isEmpty(todoList)) { | |||
List<ProcessTaskVo> list = Stream.concat(todoList.stream(),backList.stream()).collect(Collectors.toList()); | |||
list.stream().filter(Objects::nonNull).sorted(Comparator.comparing(ProcessTaskVo::getTaskCreateTime).reversed()); | |||
if (CollUtil.isEmpty(list)) { | |||
return PageVo.empty(); | |||
} | |||
todoList = todoList.stream().filter(Objects::nonNull).collect(Collectors.toList()); | |||
List<ProcessTaskVo> userTodoList = todoList.stream() | |||
List<ProcessTaskVo> userTodoList = list.stream() | |||
.skip((long) (pageNumber - 1) * pageSize) | |||
.limit(pageSize) | |||
.collect(Collectors.toList()); | |||
@@ -408,5 +408,4 @@ public class UserInfoManage { | |||
} | |||
return resUserDetailVO; | |||
} | |||
} |
@@ -65,6 +65,9 @@ public class UserInfoServiceImpl extends ServiceImpl<NdUserInfoMapper, UserInfo> | |||
@Override | |||
public Map<String, ProcessInstanceUserDto> getUserMapByEmployeeCode(Set<String> staterUsers) { | |||
if(CollUtil.isEmpty(staterUsers)){ | |||
return Collections.emptyMap(); | |||
} | |||
List<UserInfo> userInfos = userInfoMapper.selectList(Wrappers.lambdaQuery(UserInfo.class) | |||
.in(UserInfo::getEmployeeCode,staterUsers)); | |||
if(CollUtil.isEmpty(userInfos)){ | |||