|
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
+import com.ruoyi.common.datascope.annotation.DataScope;
|
|
|
+import com.ruoyi.common.datascope.context.DataScopeContextHolder;
|
|
|
import com.usky.common.core.bean.CommonPage;
|
|
|
import com.usky.common.core.exception.BusinessException;
|
|
|
import com.usky.common.security.utils.SecurityUtils;
|
|
@@ -20,6 +22,7 @@ import com.usky.iot.service.PmWorkContentService;
|
|
|
import com.usky.iot.service.vo.PmProjectWorkTimeTwoVo;
|
|
|
import com.usky.iot.service.vo.PmUsersProjectWorkTimeVO;
|
|
|
import com.usky.system.domain.SysUser;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
@@ -40,6 +43,7 @@ import java.util.stream.IntStream;
|
|
|
* @author fu
|
|
|
* @since 2024-05-20
|
|
|
*/
|
|
|
+@Slf4j
|
|
|
@Service
|
|
|
public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, PmProject> implements PmProjectService {
|
|
|
|
|
@@ -67,55 +71,87 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
Integer tenantId = SecurityUtils.getTenantId();
|
|
|
LocalDateTime now = LocalDateTime.now();
|
|
|
|
|
|
- if (project.getVisibleRange() == null){
|
|
|
- project.setVisibleRange((byte) 1);
|
|
|
+ // 检查项目名称是否为空或超过长度限制
|
|
|
+ String projectName = project.getProjectName();
|
|
|
+ if (StringUtils.isBlank(projectName)) {
|
|
|
+ throw new BusinessException("项目名称不能为空!");
|
|
|
+ }else if (projectName.length() > 50) {
|
|
|
+ throw new BusinessException("项目名称长度不能超过50个字符!");
|
|
|
}
|
|
|
|
|
|
+ // 检查项目名称是否已存在
|
|
|
if (Objects.isNull(project.getId())) {
|
|
|
- String projectName = project.getProjectName();
|
|
|
- LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper.eq(PmProject::getProjectName, projectName)
|
|
|
- .eq(PmProject::getTenantId, tenantId)
|
|
|
- .eq(PmProject::getDelFlag, 0);
|
|
|
- PmProject pmProject = pmProjectMapper.selectOne(wrapper);
|
|
|
- if (Objects.nonNull(pmProject)) {
|
|
|
- throw new BusinessException("已存在同名项目!请检查后重试");
|
|
|
- }
|
|
|
+ checkProjectNameExistence(project, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查项目类型是否为空或不在有效范围内
|
|
|
+ Integer projectType = project.getProjectType();
|
|
|
+ if (projectType == null) {
|
|
|
+ throw new BusinessException("项目类型不能为空且");
|
|
|
+ }else if (projectType < 1 || projectType > 6) {
|
|
|
+ throw new BusinessException("项目类型传参有误!");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查项目状态是否为空或不在有效范围内
|
|
|
+ Integer projectStatus = project.getProjectStatus();
|
|
|
+ if (projectStatus == null) {
|
|
|
+ throw new BusinessException("项目状态不能为空且!");
|
|
|
+ }else if (projectStatus < 1 || projectStatus > 5) {
|
|
|
+ throw new BusinessException("项目状态传参有误!");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 设置项目工作量和校验
|
|
|
+ handleProjectWorkload(project);
|
|
|
+
|
|
|
+ // 保存或更新项目
|
|
|
+ saveOrUpdateProject(project, userName, now, deptId, tenantId);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查项目名称是否已存在
|
|
|
+ private void checkProjectNameExistence(PmProject project, Integer tenantId) {
|
|
|
+ LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
|
|
|
+ wrapper.eq(PmProject::getProjectName, project.getProjectName())
|
|
|
+ .eq(PmProject::getTenantId, tenantId)
|
|
|
+ .eq(PmProject::getDelFlag, 0);
|
|
|
+ PmProject existingProject = pmProjectMapper.selectOne(wrapper);
|
|
|
+ if (Objects.nonNull(existingProject)) {
|
|
|
+ throw new BusinessException("已存在同名项目!请检查后重试");
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ // 处理项目工作量
|
|
|
+ private void handleProjectWorkload(PmProject project) {
|
|
|
if (Objects.isNull(project.getProjectWorkload())) {
|
|
|
- if (Objects.isNull(project.getId())) {
|
|
|
- project.setCreateBy(userName);
|
|
|
- project.setCreateTime(now);
|
|
|
- project.setTenantId(tenantId);
|
|
|
- project.setDeptId(deptId);
|
|
|
- this.save(project);
|
|
|
- } else {
|
|
|
- project.setUpdateBy(userName);
|
|
|
- project.setUpdateTime(now);
|
|
|
- this.updateById(project);
|
|
|
- }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (project.getProjectWorkload().scale() > 1) {
|
|
|
+ throw new BusinessException("计划人/天小数位超出长度,请重新输入!");
|
|
|
+ } else if (project.getProjectWorkload().precision() - project.getProjectWorkload().scale() > 5) {
|
|
|
+ throw new BusinessException("计划人/天整数位超出长度,请重新输入!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 保存或更新项目
|
|
|
+ private void saveOrUpdateProject(PmProject project, String userName, LocalDateTime now, Long deptId, Integer tenantId) {
|
|
|
+ if (Objects.isNull(project.getId())) {
|
|
|
+ project.setCreateBy(userName);
|
|
|
+ project.setCreateTime(now);
|
|
|
+ project.setDeptId(deptId);
|
|
|
+ project.setTenantId(tenantId);
|
|
|
+ this.save(project);
|
|
|
} else {
|
|
|
- if (project.getProjectWorkload().scale() > 1) {
|
|
|
- throw new BusinessException("计划人/天小数位超出长度,请重新输入!");
|
|
|
- } else if (project.getProjectWorkload().precision() - project.getProjectWorkload().scale() > 5) {
|
|
|
- throw new BusinessException("计划人/天整数位超出长度,请重新输入!");
|
|
|
- } else {
|
|
|
- if (Objects.isNull(project.getId())) {
|
|
|
- project.setCreateBy(userName);
|
|
|
- project.setCreateTime(now);
|
|
|
- project.setDeptId(deptId);
|
|
|
- project.setTenantId(tenantId);
|
|
|
- this.save(project);
|
|
|
- } else {
|
|
|
- project.setUpdateBy(userName);
|
|
|
- project.setUpdateTime(now);
|
|
|
- this.updateById(project);
|
|
|
- }
|
|
|
- }
|
|
|
+ project.setUpdateBy(userName);
|
|
|
+ project.setUpdateTime(now);
|
|
|
+ this.updateById(project);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 删除项目
|
|
|
+ *
|
|
|
+ * @param projectId 项目id
|
|
|
+ */
|
|
|
@Override
|
|
|
public void delProject(Integer projectId) {
|
|
|
LambdaQueryWrapper<PmWorkContent> queryWrapper = Wrappers.lambdaQuery();
|
|
@@ -154,7 +190,7 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
)
|
|
|
.in(PmProject::getProjectStatus, 1, 2, 3);
|
|
|
List<PmProject> list = this.list(wrapper);
|
|
|
- if (list.isEmpty()){
|
|
|
+ if (list.isEmpty()) {
|
|
|
return list;
|
|
|
}
|
|
|
|
|
@@ -165,8 +201,8 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
.in(PmWorkContent::getProjectId, projectIds)
|
|
|
.between(PmWorkContent::getCreateTime, LocalDateTime.now().minusDays(29), LocalDateTime.now());
|
|
|
List<PmWorkContent> pmWorkContents = pmWorkContentMapper.selectList(queryWrapper);
|
|
|
- if (pmWorkContents.isEmpty()){
|
|
|
- for (PmProject project : list){
|
|
|
+ if (pmWorkContents.isEmpty()) {
|
|
|
+ for (PmProject project : list) {
|
|
|
project.setSubmissions(0L);
|
|
|
}
|
|
|
return list;
|
|
@@ -177,10 +213,10 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
|
|
|
for (PmProject project : list) {
|
|
|
Integer id = project.getId();
|
|
|
- Long aLong = projectIdCountMap.getOrDefault(id,0L);
|
|
|
+ Long aLong = projectIdCountMap.getOrDefault(id, 0L);
|
|
|
project.setSubmissions(aLong);
|
|
|
}
|
|
|
- //降序排序
|
|
|
+ // 降序排序
|
|
|
Collections.sort(list, new Comparator<PmProject>() {
|
|
|
@Override
|
|
|
public int compare(PmProject p1, PmProject p2) {
|
|
@@ -210,44 +246,77 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
String username = SecurityUtils.getUsername();
|
|
|
String nickName = SecurityUtils.getLoginUser().getSysUser().getNickName();
|
|
|
Integer tenantId = SecurityUtils.getTenantId();
|
|
|
+
|
|
|
LambdaQueryWrapper<PmProject> lambdaQuery = Wrappers.lambdaQuery();
|
|
|
- lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId()).eq(PmProject::getDelFlag, 0)
|
|
|
+ lambdaQuery.eq(PmProject::getTenantId, tenantId)
|
|
|
+ .eq(PmProject::getDelFlag, 0)
|
|
|
.eq(visibleRange != null, PmProject::getVisibleRange, visibleRange);
|
|
|
+
|
|
|
if (projectId != null && projectId != 0) {
|
|
|
lambdaQuery.eq(PmProject::getId, projectId);
|
|
|
page = this.page(page, lambdaQuery);
|
|
|
return new CommonPage<>(page.getRecords(), page.getTotal(), pageSize, pageNum);
|
|
|
}
|
|
|
+
|
|
|
switch (projectAscription) {
|
|
|
case 0:
|
|
|
- if (visibleRange != null && visibleRange == 1) {
|
|
|
- break;
|
|
|
+ if (StringUtils.isNotBlank(projectName) || projectType != null || projectStatus != null) {
|
|
|
+ lambdaQuery.eq(PmProject::getDelFlag, 0)
|
|
|
+ .like(StringUtils.isNotBlank(projectName), PmProject::getProjectName, projectName)
|
|
|
+ .eq(projectType != null, PmProject::getProjectType, projectType)
|
|
|
+ .eq(projectStatus != null, PmProject::getProjectStatus, projectStatus)
|
|
|
+ .and(qw -> qw
|
|
|
+ .eq(PmProject::getProjectHead, userId)
|
|
|
+ .or()
|
|
|
+ .apply("FIND_IN_SET('" + userId + "', project_member) > 0")
|
|
|
+ .or()
|
|
|
+ .eq(PmProject::getCreateBy, username));
|
|
|
}
|
|
|
- lambdaQuery.and(q -> q.eq(PmProject::getProjectHead, userId)
|
|
|
- .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
|
|
|
- .or().eq(PmProject::getCreateBy, username));
|
|
|
+ if (visibleRange == null) {
|
|
|
+ lambdaQuery.eq(PmProject::getDelFlag, 0)
|
|
|
+ .and(wrapper -> wrapper
|
|
|
+ .eq(PmProject::getVisibleRange, 2)
|
|
|
+ .and(qw -> qw
|
|
|
+ .eq(PmProject::getProjectHead, userId)
|
|
|
+ .or()
|
|
|
+ .apply("FIND_IN_SET('" + userId + "', project_member) > 0")
|
|
|
+ .or()
|
|
|
+ .eq(PmProject::getCreateBy, username))
|
|
|
+ )
|
|
|
+ .or()
|
|
|
+ .eq(PmProject::getVisibleRange, 1)
|
|
|
+ .eq(PmProject::getDelFlag, 0);
|
|
|
+ } else if (visibleRange == 2) {
|
|
|
+ lambdaQuery.and(wrapper -> wrapper
|
|
|
+ .eq(PmProject::getProjectHead, userId)
|
|
|
+ .or()
|
|
|
+ .apply("FIND_IN_SET('" + userId + "', project_member) > 0")
|
|
|
+ .or()
|
|
|
+ .eq(PmProject::getCreateBy, username)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ lambdaQuery.like(StringUtils.isNotBlank(projectName), PmProject::getProjectName, projectName)
|
|
|
+ .eq(projectType != null, PmProject::getProjectType, projectType)
|
|
|
+ .eq(projectStatus != null, PmProject::getProjectStatus, projectStatus);
|
|
|
break;
|
|
|
case 1:
|
|
|
- lambdaQuery.eq(PmProject::getProjectHead, userId);
|
|
|
+ lambdaQuery.eq(PmProject::getProjectHead, userId)
|
|
|
+ .like(StringUtils.isNotBlank(projectName), PmProject::getProjectName, projectName)
|
|
|
+ .eq(projectType != null, PmProject::getProjectType, projectType)
|
|
|
+ .eq(projectStatus != null, PmProject::getProjectStatus, projectStatus);
|
|
|
break;
|
|
|
case 2:
|
|
|
- lambdaQuery.apply("FIND_IN_SET('" + userId + "', project_member) > 0");
|
|
|
+ lambdaQuery.apply("FIND_IN_SET('" + userId + "', project_member) > 0")
|
|
|
+ .like(StringUtils.isNotBlank(projectName), PmProject::getProjectName, projectName)
|
|
|
+ .eq(projectType != null, PmProject::getProjectType, projectType)
|
|
|
+ .eq(projectStatus != null, PmProject::getProjectStatus, projectStatus);
|
|
|
break;
|
|
|
default:
|
|
|
throw new BusinessException("查询项目列表参数错误");
|
|
|
}
|
|
|
- if (StringUtils.isNotBlank(projectName)) {
|
|
|
- lambdaQuery.like(PmProject::getProjectName, projectName);
|
|
|
- }
|
|
|
- if (projectType != 0) {
|
|
|
- lambdaQuery.eq(PmProject::getProjectType, projectType);
|
|
|
- }
|
|
|
- if (projectStatus != 0) {
|
|
|
- lambdaQuery.eq(PmProject::getProjectStatus, projectStatus);
|
|
|
- }
|
|
|
lambdaQuery.orderByDesc(PmProject::getCreateTime);
|
|
|
List<PmProject> pmProjects = pmProjectMapper.selectList(lambdaQuery);
|
|
|
- if (pmProjects.isEmpty()){
|
|
|
+ if (pmProjects.isEmpty()) {
|
|
|
return new CommonPage<>(pmProjects, 0, pageSize, pageNum);
|
|
|
}
|
|
|
|
|
@@ -307,25 +376,35 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
*/
|
|
|
@Override
|
|
|
public Map<String, Integer> sum() {
|
|
|
+ Integer tenantId = SecurityUtils.getTenantId();
|
|
|
+ Long userId = SecurityUtils.getUserId();
|
|
|
+
|
|
|
LambdaQueryWrapper<PmProject> lambdaQuery = Wrappers.lambdaQuery();
|
|
|
- lambdaQuery.eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .and(q -> q.eq(PmProject::getProjectHead, SecurityUtils.getUserId())
|
|
|
- .or().eq(PmProject::getVisibleRange, 1)
|
|
|
- .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
|
|
|
- .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername()))
|
|
|
+ lambdaQuery.eq(PmProject::getTenantId, tenantId)
|
|
|
+ .eq(PmProject::getDelFlag, 0)
|
|
|
+ .eq(PmProject::getVisibleRange, 2)
|
|
|
+ .and(q -> q.or().eq(PmProject::getProjectHead, userId)
|
|
|
+ .or().apply("FIND_IN_SET('" + userId + "', project_member) > 0")
|
|
|
+ .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername()));
|
|
|
+ Integer allA = this.count(lambdaQuery);
|
|
|
+
|
|
|
+ LambdaQueryWrapper<PmProject> lambdaQuery3 = Wrappers.lambdaQuery();
|
|
|
+ lambdaQuery3.eq(PmProject::getTenantId, tenantId)
|
|
|
+ .eq(PmProject::getVisibleRange, 1)
|
|
|
.eq(PmProject::getDelFlag, 0);
|
|
|
- Integer all = this.count(lambdaQuery);
|
|
|
+ Integer allB = this.count(lambdaQuery3);
|
|
|
+ int all = allA + allB;
|
|
|
|
|
|
LambdaQueryWrapper<PmProject> lambdaQuery1 = Wrappers.lambdaQuery();
|
|
|
- lambdaQuery1.eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ lambdaQuery1.eq(PmProject::getTenantId, tenantId)
|
|
|
.eq(PmProject::getDelFlag, 0)
|
|
|
- .eq(PmProject::getProjectHead, SecurityUtils.getUserId());
|
|
|
+ .eq(PmProject::getProjectHead, userId);
|
|
|
Integer head = this.count(lambdaQuery1);
|
|
|
|
|
|
LambdaQueryWrapper<PmProject> lambdaQuery2 = Wrappers.lambdaQuery();
|
|
|
- lambdaQuery2.eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
+ lambdaQuery2.eq(PmProject::getTenantId, tenantId)
|
|
|
.eq(PmProject::getDelFlag, 0)
|
|
|
- .apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0");
|
|
|
+ .apply("FIND_IN_SET('" + userId + "', project_member) > 0");
|
|
|
Integer join = this.count(lambdaQuery2);
|
|
|
|
|
|
Map<String, Integer> sumMap = new HashMap<>();
|
|
@@ -345,35 +424,17 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
public List<Map<String, Object>> projectUsers(Long userId) {
|
|
|
List<Map<String, Object>> returnList = new ArrayList<>();
|
|
|
List<SysUser> userList = new ArrayList<>();
|
|
|
+ LambdaQueryWrapper<SysUser> queryNameId = Wrappers.lambdaQuery();
|
|
|
if (userId != null) {
|
|
|
- LambdaQueryWrapper<SysUser> queryNameId = Wrappers.lambdaQuery();
|
|
|
- queryNameId.select(SysUser::getUserId, SysUser::getNickName)
|
|
|
+ queryNameId.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName)
|
|
|
.eq(SysUser::getUserId, userId);
|
|
|
- userList = sysUserMapper.selectList(queryNameId);
|
|
|
} else {
|
|
|
- LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper.select(PmProject::getProjectHead, PmProject::getProjectMember)
|
|
|
- .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .eq(PmProject::getDelFlag, 0);
|
|
|
- List<PmProject> users = pmProjectMapper.selectList(wrapper);
|
|
|
-
|
|
|
- List<Long> userIds = new ArrayList<>();
|
|
|
- for (PmProject user : users) {
|
|
|
- Long projectHead = user.getProjectHead();
|
|
|
- userIds.add(projectHead);
|
|
|
- if (user.getProjectMember() != null && StringUtils.isNotBlank(user.getProjectMember())) {
|
|
|
- Set<Long> projectMembers = Arrays.stream(user.getProjectMember().split(","))
|
|
|
- .map(Long::parseLong)
|
|
|
- .collect(Collectors.toSet());
|
|
|
- userIds.addAll(projectMembers);
|
|
|
- }
|
|
|
- }
|
|
|
- List<Long> finalList = userIds.stream().distinct().collect(Collectors.toList());
|
|
|
- LambdaQueryWrapper<SysUser> wrapper2 = Wrappers.lambdaQuery();
|
|
|
- wrapper2.select(SysUser::getUserId, SysUser::getNickName)
|
|
|
- .in(SysUser::getUserId, finalList);
|
|
|
- userList = sysUserMapper.selectList(wrapper2);
|
|
|
+ queryNameId.select(SysUser::getUserId, SysUser::getNickName, SysUser::getUserName)
|
|
|
+ .eq(SysUser::getDelFlag, 0)
|
|
|
+ .eq(SysUser::getStatus, "0")
|
|
|
+ .apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql());
|
|
|
}
|
|
|
+ userList = sysUserMapper.selectList(queryNameId);
|
|
|
for (SysUser user : userList) {
|
|
|
Map<String, Object> map = new HashMap<>();
|
|
|
map.put("id", user.getUserId());
|
|
@@ -388,16 +449,25 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
*
|
|
|
* @return
|
|
|
*/
|
|
|
+ @DataScope
|
|
|
@Override
|
|
|
public List<Map<String, Object>> projectIdName(Integer projectId) {
|
|
|
+ Long userId = SecurityUtils.getUserId();
|
|
|
List<Map<String, Object>> returnList = new ArrayList<>();
|
|
|
LambdaQueryWrapper<PmProject> wrapper = Wrappers.lambdaQuery();
|
|
|
- wrapper.select(PmProject::getId, PmProject::getProjectName)
|
|
|
- .eq(PmProject::getTenantId, SecurityUtils.getTenantId())
|
|
|
- .eq(PmProject::getDelFlag, 0);
|
|
|
+ wrapper.select(PmProject::getId, PmProject::getProjectName);
|
|
|
if (projectId != null) {
|
|
|
wrapper.eq(PmProject::getId, projectId);
|
|
|
+ } else {
|
|
|
+ wrapper.eq(PmProject::getDelFlag, 0)
|
|
|
+ .and(qw -> qw
|
|
|
+ .apply(Objects.nonNull(DataScopeContextHolder.getDataScopeSql()), DataScopeContextHolder.getDataScopeSql())
|
|
|
+ .or().eq(PmProject::getProjectHead, userId)
|
|
|
+ .or().eq(PmProject::getCreateBy, SecurityUtils.getUsername())
|
|
|
+ .or().apply("FIND_IN_SET('" + SecurityUtils.getUserId() + "', project_member) > 0")
|
|
|
+ );
|
|
|
}
|
|
|
+
|
|
|
List<PmProject> projects = pmProjectMapper.selectList(wrapper);
|
|
|
for (PmProject project : projects) {
|
|
|
Map<String, Object> returnMap = new HashMap<>();
|
|
@@ -580,6 +650,11 @@ public class PmProjectServiceImpl extends AbstractCrudService<PmProjectMapper, P
|
|
|
}
|
|
|
|
|
|
List<Long> userIds1 = new ArrayList<>(userIds);
|
|
|
+
|
|
|
+ if (userIds1.isEmpty()) {
|
|
|
+ return workTimeCount;
|
|
|
+ }
|
|
|
+
|
|
|
List<SysUser> sysUsers = pmWorkContentService.nickNames(userIds1);
|
|
|
BigDecimal totalWorkTime = BigDecimal.ZERO;
|
|
|
|