diff --git a/cloudutil/src/main/java/com/ccsens/cloudutil/aspect/LogAspect.java b/cloudutil/src/main/java/com/ccsens/cloudutil/aspect/LogAspect.java index 374a3141..549961e1 100644 --- a/cloudutil/src/main/java/com/ccsens/cloudutil/aspect/LogAspect.java +++ b/cloudutil/src/main/java/com/ccsens/cloudutil/aspect/LogAspect.java @@ -31,10 +31,10 @@ import java.lang.reflect.Method; * @author: wuHuiJuan * @create: 2019/12/10 10:06 */ -@Order(1) +//@Order(1) @Slf4j -@Aspect -@Component +//@Aspect +//@Component public class LogAspect { @Autowired diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java index 60e712c1..bdbaeaba 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/ProjectDto.java @@ -6,6 +6,8 @@ import lombok.Data; import lombok.Getter; import lombok.Setter; +import javax.validation.constraints.NotNull; + public class ProjectDto { @Data @ApiModel @@ -48,7 +50,8 @@ public class ProjectDto { @Data @ApiModel public static class ProjectIdDto{ - @ApiModelProperty("根据哪个项目拷贝") + @ApiModelProperty("项目id") + @NotNull(message = "项目id不能为空") private Long projectId; } diff --git a/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java b/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java index e095ce0e..6c0937fa 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java +++ b/tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java @@ -92,15 +92,6 @@ public class TaskDto { private Long taskId; } - @Data - public static class DeleteTask { - @NotNull(message = "projectId is required.") - private Long projectId; - @NotNull(message = "roleId is required.") - private Long roleId; - private Long taskId; - } - @Data public static class MoveTask { @NotNull(message = "projectId is required.") @@ -123,21 +114,27 @@ public class TaskDto { @Data @ApiModel - public static class UpdateTask{ + public static class UpdateTaskInfo{ @ApiModelProperty("任务id") private Long id; @ApiModelProperty("任务名") private String name; @ApiModelProperty("任务详情") private String description; + @ApiModelProperty("负责人") + private Long executorRole; @ApiModelProperty("任务开始时间") private Long beginTime; - @ApiModelProperty("任务时长") - private Long duration; + @ApiModelProperty("任务结束时间") + private Long endTime; + @ApiModelProperty("重复频率") + private String cycle; @ApiModelProperty("任务奖惩") private Long money; - @ApiModelProperty("任务切换模式") + @ApiModelProperty("任务切换模式,0时间到立刻切换 1延迟delay_time切换 2手动切换") private int delay; + @ApiModelProperty("延迟切换时间") + private Long delayTime; } @ApiModel diff --git a/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java b/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java index 972af559..8ac16927 100644 --- a/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java +++ b/tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java @@ -91,7 +91,7 @@ public class TaskVo { private String showTimeFormat; @ApiModelProperty("循环周期") private String cycle; - @ApiModelProperty("跳转模式 -1手动,0自动,1延迟") + @ApiModelProperty("跳转模式 0自动,1延迟,2手动") private int delay; @ApiModelProperty("实际开始时间") private Long realBeginTime; diff --git a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java index cc89780e..83f79243 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java @@ -1,5 +1,6 @@ package com.ccsens.tall.service; +import com.ccsens.tall.bean.dto.TaskDto; import com.ccsens.tall.bean.po.ProTaskDetail; import com.ccsens.tall.bean.vo.TaskVo; @@ -23,4 +24,6 @@ public interface IProTaskDetailService { void deleteTask(Long currentUserId,Long taskId); void deleteTaskByRoleId(Long taskId); + + TaskVo.NormalTask updateTaskInfo(Long currentUserId, TaskDto.UpdateTaskInfo updateTaskInfo) throws Exception; } diff --git a/tall/src/main/java/com/ccsens/tall/service/IProjectService.java b/tall/src/main/java/com/ccsens/tall/service/IProjectService.java index 54b44ed0..60230e44 100644 --- a/tall/src/main/java/com/ccsens/tall/service/IProjectService.java +++ b/tall/src/main/java/com/ccsens/tall/service/IProjectService.java @@ -1,5 +1,6 @@ package com.ccsens.tall.service; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.po.SysProject; import com.ccsens.tall.bean.vo.ProjectVo; @@ -28,5 +29,7 @@ public interface IProjectService { void deleteProject(Long currentUserId, Long projectId)throws Exception; - ProjectVo.ProjectInfo copyProject(Long userId, Long projectId); + ProjectVo.ProjectInfo copyProject(Long userId, ProjectDto.ProjectIdDto projectDto); + + ProjectVo.ProjectInfo changeProjectInfo(Long currentUserId, ProjectDto.ProjectInfoDto projectInfoDto); } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java index 155d1da7..3f0a83e6 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProRoleService.java @@ -21,7 +21,7 @@ import java.util.List; @Slf4j @Service -@Transactional(propagation = Propagation.REQUIRED,rollbackFor = Exception.class) +@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class) public class ProRoleService implements IProRoleService { @Autowired private ProRoleDao proRoleDao; @@ -50,7 +50,7 @@ public class ProRoleService implements IProRoleService { */ @Override public List getProRoleByProjectIdAndUserId(Long projectId, Long currentUserId) { - return proRoleDao.selectFirstRoleByProjectIdAndUserId(projectId,currentUserId); + return proRoleDao.selectFirstRoleByProjectIdAndUserId(projectId, currentUserId); } /** @@ -63,11 +63,24 @@ public class ProRoleService implements IProRoleService { memberRoleList = getRealMemberRolesByProjectId(projectId); //获取用户在项目中的角色 List roleList = proMemberService.selectRolesByUserIdAndProjectId(currentUserId, projectId); - //是否mine + if (CollectionUtil.isNotEmpty(memberRoleList)) { - for (ProjectVo.RoleInfo memberRole : memberRoleList) { - if (ObjectUtil.isNotNull(roleList)) { - for(ProRole role:roleList){ + if (CollectionUtil.isNotEmpty(roleList)) { + //用户是否只是关注者 + Boolean isAttention = false; + if(roleList.size() == 1){ + ProRole role = roleList.get(0); + if(role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.Attention.phase)){ + isAttention = true; + } + } + //是否mine(若是用户是关注者,则所有角色都暂时属于关注者) + for (ProjectVo.RoleInfo memberRole : memberRoleList) { + if(isAttention){ + memberRole.setMine(true); + continue; + } + for (ProRole role : roleList) { if (memberRole.getId().equals(role.getId())) { memberRole.setMine(true); break; @@ -76,39 +89,35 @@ public class ProRoleService implements IProRoleService { } } } - } - } - //排除该角色不能看的其他角色 -// List carelessMemberRoleList = getCareLessRoleByProjectIdAndUserId(projectId, currentUserId); - List excludeIdList = new ArrayList<>(); - if(CollectionUtil.isNotEmpty(roleList)){ - for(ProRole role :roleList){ - ProRoleExcludeExample excludeExample = new ProRoleExcludeExample(); - excludeExample.createCriteria().andOtherRoleIdEqualTo(role.getId()); - List excludeList = excludeDao.selectByExample(excludeExample); - if(CollectionUtil.isNotEmpty(excludeList)){ - for(ProRoleExclude roleExclude : excludeList){ - excludeIdList.add(roleExclude.getRoleId()); + //排除该角色不能看的其他角色 + List excludeIdList = new ArrayList<>(); + for (ProRole role : roleList) { + ProRoleExcludeExample excludeExample = new ProRoleExcludeExample(); + excludeExample.createCriteria().andOtherRoleIdEqualTo(role.getId()); + List excludeList = excludeDao.selectByExample(excludeExample); + if (CollectionUtil.isNotEmpty(excludeList)) { + for (ProRoleExclude roleExclude : excludeList) { + excludeIdList.add(roleExclude.getRoleId()); + } } } - } - } - - if (CollectionUtil.isNotEmpty(excludeIdList)) { - for (Long otherRoleId : excludeIdList) { - for (ProjectVo.RoleInfo memberRole : memberRoleList) { - if (otherRoleId.longValue() == memberRole.getId().longValue()) { - if(!memberRole.isMine()){ - memberRoleList.remove(memberRole); + if (CollectionUtil.isNotEmpty(excludeIdList)) { + for (Long otherRoleId : excludeIdList) { + for (ProjectVo.RoleInfo memberRole : memberRoleList) { + if (otherRoleId.longValue() == memberRole.getId().longValue()) { + //若是关注者,正常删除。若不是关注者,不删除自己所属的角色 + if(isAttention){ + memberRoleList.remove(memberRole); + }else if (!memberRole.isMine()) { + memberRoleList.remove(memberRole); + } + break; + } } - break; } } } - } - - //是否PM - if (CollectionUtil.isNotEmpty(memberRoleList)) { + //是否PM for (ProjectVo.RoleInfo memberRole : memberRoleList) { ProRole parentRole = proRoleDao.selectByPrimaryKey(memberRole.getParentId()); if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) { @@ -117,25 +126,22 @@ public class ProRoleService implements IProRoleService { memberRole.setPm(false); } } - } - - //奖惩干系人信息 - if (CollectionUtil.isNotEmpty(memberRoleList)) { + //奖惩干系人信息 for (ProjectVo.RoleInfo memberRole : memberRoleList) { if (CollectionUtil.isNotEmpty(memberRole.getMembers())) { for (ProjectVo.ProMemberVo member : memberRole.getMembers()) { String mAccount = userService.selectAccountByPhone(member.getMPhone()); member.setMUsername(mAccount); //查找奖惩干系人 - if(ObjectUtil.isNotNull(member.getStakeholderId())) { + if (ObjectUtil.isNotNull(member.getStakeholderId())) { ProMember stakeholder = proMemberDao.selectByPrimaryKey(member.getStakeholderId()); - if(ObjectUtil.isNotNull(stakeholder)){ + if (ObjectUtil.isNotNull(stakeholder)) { member.setSId(stakeholder.getId()); member.setSName(stakeholder.getNickname()); member.setMPhone(stakeholder.getPhone()); String stakeholderAccount = userService.selectAccountByPhone(member.getMPhone()); member.setSUsername(stakeholderAccount); - if(ObjectUtil.isNotNull(stakeholder.getUserId())){ + if (ObjectUtil.isNotNull(stakeholder.getUserId())) { if (currentUserId.longValue() == stakeholder.getUserId()) { member.setStakeholder(true); } @@ -159,6 +165,7 @@ public class ProRoleService implements IProRoleService { /** * 获取此用户不可见的角色 + * * @param projectId * @param currentUserId * @return @@ -169,18 +176,19 @@ public class ProRoleService implements IProRoleService { /** * 获取用户在项目中的最高权限 + * * @return */ @Override - public int selectPowerByRoleName(Long userId,Long projectId) { + public int selectPowerByRoleName(Long userId, Long projectId) { int power = 0; SysProject project = projectDao.selectByPrimaryKey(projectId); - if(project.getCreatorId().longValue() == userId){ + if (project.getCreatorId().longValue() == userId) { power = 2; } - List roles = getProRoleByProjectIdAndUserId(projectId,userId); - if(CollectionUtil.isNotEmpty(roles)){ - for(ProRole role:roles){ + List roles = getProRoleByProjectIdAndUserId(projectId, userId); + if (CollectionUtil.isNotEmpty(roles)) { + for (ProRole role : roles) { int i = proRoleDao.selectPowerByRoleName(role.getDescription()); power = i > power ? i : power; } @@ -194,7 +202,7 @@ public class ProRoleService implements IProRoleService { @Override public TaskVo.RoleCheckList selectRoleByCheckOrExecutor(Long roleId) { TaskVo.RoleCheckList roleCheckList = new TaskVo.RoleCheckList(); - if(roleId != 0) { + if (roleId != 0) { ProRole role = proRoleDao.selectByPrimaryKey(roleId); roleCheckList.setId(role.getId()); roleCheckList.setName(role.getName()); @@ -211,7 +219,7 @@ public class ProRoleService implements IProRoleService { ProRoleExample roleExample = new ProRoleExample(); roleExample.createCriteria().andProjectIdEqualTo(projectId).andNameEqualTo(WebConstant.ROLE_NAME.AllMember.phase); List roleList = proRoleDao.selectByExample(roleExample); - if(CollectionUtil.isNotEmpty(roleList)){ + if (CollectionUtil.isNotEmpty(roleList)) { role = roleList.get(0); } return role; @@ -223,12 +231,12 @@ public class ProRoleService implements IProRoleService { * 删除角色 */ @Override - public void deleteRole(Long userId,Long roleId){ + public void deleteRole(Long userId, Long roleId) { ProRole role = proRoleDao.selectByPrimaryKey(roleId); //本用户在项目中的角色 List proRoles = getProRoleByProjectIdAndUserId(role.getProjectId(), userId); //用户在项目中的最高权限 - int power = selectPowerByRoleName(userId,role.getProjectId()); + int power = selectPowerByRoleName(userId, role.getProjectId()); if (power > 1) { deleteRoleByRoleId(roleId); } else { @@ -244,22 +252,22 @@ public class ProRoleService implements IProRoleService { ProRoleExample roleExample = new ProRoleExample(); roleExample.createCriteria().andProjectIdEqualTo(projectId); List roleList = proRoleDao.selectByExample(roleExample); - if(CollectionUtil.isNotEmpty(roleList)){ - for(ProRole role:roleList){ + if (CollectionUtil.isNotEmpty(roleList)) { + for (ProRole role : roleList) { deleteRoleByRoleId(role.getId()); } } } - private void deleteRoleByRoleId(Long roleId){ + private void deleteRoleByRoleId(Long roleId) { //删除角色下的任务 taskDetailService.deleteTaskByRoleId(roleId); //删除成员和成员角色关联表 ProMemberRoleExample memberRoleExample = new ProMemberRoleExample(); memberRoleExample.createCriteria().andRoleIdEqualTo(roleId); List memberRoleList = memberRoleDao.selectByExample(memberRoleExample); - if(CollectionUtil.isNotEmpty(memberRoleList)){ - for(ProMemberRole memberRole:memberRoleList){ + if (CollectionUtil.isNotEmpty(memberRoleList)) { + for (ProMemberRole memberRole : memberRoleList) { proMemberDao.deleteByPrimaryKey(memberRole.getMemberId()); memberRoleDao.deleteByPrimaryKey(memberRole.getId()); } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java index c8c060a8..35a7e296 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java @@ -2,8 +2,10 @@ package com.ccsens.tall.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.ccsens.tall.bean.dto.TaskDto; import com.ccsens.tall.bean.po.*; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.bean.vo.TaskVo; @@ -12,7 +14,11 @@ import com.ccsens.tall.util.TaskUtil; import com.ccsens.util.CodeEnum; import com.ccsens.util.DateUtil; import com.ccsens.util.WebConstant; +import com.ccsens.util.cron.CronConstant; +import com.ccsens.util.cron.NatureToDate; import com.ccsens.util.exception.BaseException; +import com.sun.org.apache.bcel.internal.classfile.Code; +import io.swagger.annotations.ApiModelProperty; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @@ -20,6 +26,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; +import java.sql.Struct; import java.util.*; @@ -55,6 +62,8 @@ public class ProTaskDetailService implements IProTaskDetailService { private SysProjectDao sysProjectDao; @Autowired private TaskPluginDao taskPluginDao; + @Autowired + private Snowflake snowflake; @Override public void saveTaskDetail(ProTaskDetail taskDetail) { @@ -760,8 +769,8 @@ public class ProTaskDetailService implements IProTaskDetailService { */ @Override public List getTaskDetailByKey(Long currentUserId, Long projectId, String key) { - List taskDetailByKeyList = taskDetailDao.selectTaskByKey(currentUserId, projectId, key); - return taskDetailByKeyList; +// List taskDetailByKeyList = taskDetailDao.selectTaskByKey(currentUserId, projectId, key); + return taskDetailDao.selectTaskByKey(currentUserId, projectId, key); } /** @@ -769,8 +778,7 @@ public class ProTaskDetailService implements IProTaskDetailService { */ @Override public TaskVo.NormalTask selectTaskByParentId(Long parentId, Long startTime, Long endTime) { - TaskVo.NormalTask normalTask = taskDetailDao.selectTaskByParentIdAndTime(parentId, startTime, endTime); - return normalTask; + return taskDetailDao.selectTaskByParentIdAndTime(parentId, startTime, endTime); } /** @@ -878,4 +886,119 @@ public class ProTaskDetailService implements IProTaskDetailService { taskDetailDao.selectTaskByDetailId(taskId); } + /** + * 修改任务信息 + */ + @Override + public TaskVo.NormalTask updateTaskInfo(Long currentUserId, TaskDto.UpdateTaskInfo updateTaskInfo) throws Exception { + TaskVo.NormalTask normalTask = null; + + ProTaskDetail taskDetail = null; + ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(updateTaskInfo.getId()); + if(ObjectUtil.isNotNull(taskSubTime)){ + taskDetail = taskDetailDao.selectByPrimaryKey(taskSubTime.getTaskDetailId()); + }else { + taskDetail = taskDetailDao.selectByPrimaryKey(updateTaskInfo.getId()); + } + if(ObjectUtil.isNotNull(taskDetail)) { + SysProject project = sysProjectDao.selectByPrimaryKey(taskDetail.getProjectId()); + if(ObjectUtil.isNotNull(project)) { + int power = proRoleService.selectPowerByRoleName(currentUserId, project.getId()); + if (power > 1) { + //任务名 + if(StrUtil.isNotEmpty(updateTaskInfo.getName())){ + taskDetail.setName(updateTaskInfo.getName()); + } + //详情 + if(StrUtil.isNotEmpty(updateTaskInfo.getDescription())){ + taskDetail.setDescription(updateTaskInfo.getDescription()); + } + //负责人 + if(ObjectUtil.isNotNull(updateTaskInfo.getExecutorRole())){ + taskDetail.setExecutorRole(updateTaskInfo.getExecutorRole()); + } + //奖惩金额 + if(ObjectUtil.isNotNull(updateTaskInfo.getMoney())){ + taskDetail.setMoney(updateTaskInfo.getMoney()); + } + //切换模式 + if(ObjectUtil.isNotNull(updateTaskInfo.getDelay())){ + taskDetail.setDelay((byte) updateTaskInfo.getDelay()); + } + //延迟切换时间 + if(ObjectUtil.isNotNull(updateTaskInfo.getDelayTime()) && + (taskDetail.getDelay() == WebConstant.TASK_DELAY.DelayManual.value)){ + taskDetail.setDelayTime(updateTaskInfo.getDelayTime()); + } + //时间 +// if(ObjectUtil.isNotNull(updateTaskInfo.getBeginTime()) +// && ObjectUtil.isNotNull(updateTaskInfo.getEndTime()) +// && updateTaskInfo.getBeginTime() >= updateTaskInfo.getEndTime()){ +// throw new BaseException(CodeEnum.TIME_ERROR_BEGIN); +// } + boolean isUpdateTime = false; + if(ObjectUtil.isNotNull(updateTaskInfo.getBeginTime())){ + taskDetail.setBeginTime(updateTaskInfo.getBeginTime()); + isUpdateTime = true; + } + if(ObjectUtil.isNotNull(updateTaskInfo.getEndTime())){ + taskDetail.setEndTime(updateTaskInfo.getEndTime()); + isUpdateTime = true; + } + if(StrUtil.isNotEmpty(updateTaskInfo.getCycle())){ + taskDetail.setCycle(updateTaskInfo.getCycle()); + isUpdateTime = true; + } + //时间赋完值后,检查开始时间是否小于结束时间。(赋值前判断太麻烦) + + + //若时间相关被修改,删掉旧的subTime,根据新时间重新生成 + if(isUpdateTime){ + //删掉旧的subTime + ProTaskSubTimeExample subTimeExample = new ProTaskSubTimeExample(); + subTimeExample.createCriteria().andTaskDetailIdEqualTo(taskDetail.getId()); + taskSubTimeDao.deleteByExample(subTimeExample); + //重新生成subTime + partTaskSubTime(taskDetail); + } + //修改数据 + taskDetailDao.updateByPrimaryKeySelective(taskDetail); + //返回的任务详细信息 + normalTask = getTaskInfoByTaskId(currentUserId,project.getId(),updateTaskInfo.getId()); + } + }else { + throw new BaseException(CodeEnum.NOT_POWER); + } + }else { + throw new BaseException(CodeEnum.NOT_TASK); + } + return normalTask; + } + private void partTaskSubTime(ProTaskDetail taskDetail){ + //cycle为空或者组任务,只加一条数据 + if (StrUtil.isEmpty(taskDetail.getCycle()) || taskDetail.getHasGroup() == 1) { + ProTaskSubTime proTaskSubTime = new ProTaskSubTime(); + proTaskSubTime.setId(snowflake.nextId()); + proTaskSubTime.setEndTime(taskDetail.getEndTime()); + proTaskSubTime.setBeginTime(taskDetail.getBeginTime()); + proTaskSubTime.setTaskDetailId(taskDetail.getId()); + taskSubTimeDao.insertSelective(proTaskSubTime); + } else { + Date startDate = new Date(taskDetail.getBeginTime()); + Date endDate = new Date(taskDetail.getEndTime()); + List taskDateList = + NatureToDate.generateDates(taskDetail.getCycle(), startDate, endDate); + if (CollectionUtil.isEmpty(taskDateList)) { + return; + } + for (CronConstant.TaskDate taskDate : taskDateList) { + ProTaskSubTime proTaskSubTime = new ProTaskSubTime(); + proTaskSubTime.setId(snowflake.nextId()); + proTaskSubTime.setBeginTime(taskDate.getStartDate().getTime()); + proTaskSubTime.setEndTime(taskDate.getEndDate().getTime()); + proTaskSubTime.setTaskDetailId(taskDetail.getId()); + taskSubTimeDao.insertSelective(proTaskSubTime); + } + } + } } diff --git a/tall/src/main/java/com/ccsens/tall/service/ProjectService.java b/tall/src/main/java/com/ccsens/tall/service/ProjectService.java index 2c46efa9..4b0e5904 100644 --- a/tall/src/main/java/com/ccsens/tall/service/ProjectService.java +++ b/tall/src/main/java/com/ccsens/tall/service/ProjectService.java @@ -5,6 +5,7 @@ import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.lang.Snowflake; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.po.*; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.persist.dao.*; @@ -419,10 +420,10 @@ public class ProjectService implements IProjectService { * 复制项目 */ @Override - public ProjectVo.ProjectInfo copyProject(Long userId, Long projectId) { + public ProjectVo.ProjectInfo copyProject(Long userId, ProjectDto.ProjectIdDto projectDto) { ProjectVo.ProjectInfo projectInfo = new ProjectVo.ProjectInfo(); - SysProject oldProject = sysProjectDao.selectByPrimaryKey(projectId); + SysProject oldProject = sysProjectDao.selectByPrimaryKey(projectDto.getProjectId()); SysProject newProject = new SysProject(); if (ObjectUtil.isNotNull(oldProject)) { BeanUtil.copyProperties(oldProject, newProject); @@ -441,15 +442,16 @@ public class ProjectService implements IProjectService { throw new BaseException(CodeEnum.NOT_PROJECT); } //返回参数 - projectInfo.setId(newProject.getId()); - projectInfo.setName(newProject.getName()); - projectInfo.setAddress(newProject.getAddress()); - projectInfo.setBeginTime(newProject.getBeginTime()); - projectInfo.setEndTime(newProject.getEndTime()); - projectInfo.setTotalDuration(newProject.getEndTime() - newProject.getBeginTime()); - if (ObjectUtil.isNotNull(projectInfo)) { - projectInfo.setCreator(true); - } + projectInfo = getProjectInfoById(userId,newProject.getId()); +// projectInfo.setId(newProject.getId()); +// projectInfo.setName(newProject.getName()); +// projectInfo.setAddress(newProject.getAddress()); +// projectInfo.setBeginTime(newProject.getBeginTime()); +// projectInfo.setEndTime(newProject.getEndTime()); +// projectInfo.setTotalDuration(newProject.getEndTime() - newProject.getBeginTime()); +// if (ObjectUtil.isNotNull(projectInfo)) { +// projectInfo.setCreator(true); +// } return projectInfo; } @@ -487,13 +489,12 @@ public class ProjectService implements IProjectService { } } //添加对谁不可见 - copyRoleExeclude(oldRoleList, oldRoleMap, newRoleMap); + copyRoleExclude(oldRoleList, oldRoleMap, newRoleMap); //复制任务 copyTask(oldProjectId, newProjectId, oldRoleMap, newRoleMap); } } - - private void copyRoleExeclude(List oldRoleList, Map oldRoleMap, Map newRoleMap) { + private void copyRoleExclude(List oldRoleList, Map oldRoleMap, Map newRoleMap) { if (CollectionUtil.isNotEmpty(oldRoleList)) { for (ProRole oldRole : oldRoleList) { ProRoleExcludeExample execludeExample = new ProRoleExcludeExample(); @@ -642,4 +643,40 @@ public class ProjectService implements IProjectService { } } } + + /** + * 修改项目信息 + */ + @Override + public ProjectVo.ProjectInfo changeProjectInfo(Long currentUserId, ProjectDto.ProjectInfoDto projectInfoDto) { + //查找项目 + SysProject project = sysProjectDao.selectByPrimaryKey(projectInfoDto.getId()); + if(ObjectUtil.isNotNull(project)) { + int power = proRoleService.selectPowerByRoleName(currentUserId, project.getId()); + if (power > 1) { + if (StrUtil.isNotEmpty(projectInfoDto.getName())) { + SysProjectExample projectExample = new SysProjectExample(); + projectExample.createCriteria().andNameEqualTo(projectInfoDto.getName()); + List projectList = sysProjectDao.selectByExample(projectExample); + if(CollectionUtil.isNotEmpty(projectList)){ + throw new BaseException(CodeEnum.REPEAT_PROJECT_NAME); + }else { + project.setName(projectInfoDto.getName()); + } + } + if (StrUtil.isNotEmpty(projectInfoDto.getDescription())) { + project.setDescription(projectInfoDto.getDescription()); + } + if (StrUtil.isNotEmpty(projectInfoDto.getAddress())) { + project.setAddress(projectInfoDto.getAddress()); + } + sysProjectDao.updateByPrimaryKeySelective(project); + } else { + throw new BaseException(CodeEnum.NOT_POWER); + } + }else { + throw new BaseException(CodeEnum.NOT_PROJECT); + } + return getProjectInfoById(currentUserId,project.getId()); + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java b/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java index 4f0544ef..9b20c600 100644 --- a/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java +++ b/tall/src/main/java/com/ccsens/tall/web/MemberRoleController.java @@ -4,20 +4,19 @@ import com.ccsens.cloudutil.bean.tall.dto.MemberRoleDto; import com.ccsens.cloudutil.bean.tall.vo.UserVo; import com.ccsens.tall.bean.dto.UserDto; import com.ccsens.tall.service.IProMemberRoleService; +import com.ccsens.tall.service.IProRoleService; import com.ccsens.tall.service.IUserService; import com.ccsens.util.CodeEnum; import com.ccsens.util.JsonResponse; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; +import com.ccsens.util.WebConstant; +import io.jsonwebtoken.Claims; +import io.swagger.annotations.*; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import java.util.Map; /** @@ -33,6 +32,8 @@ public class MemberRoleController { @Autowired private IProMemberRoleService memberRoleService; @Autowired + private IProRoleService proRoleService; + @Autowired private IUserService userService; @ApiOperation(value = "默认注册",notes = "默认帮助用户注册") @@ -73,5 +74,15 @@ public class MemberRoleController { return JsonResponse.newInstance().ok(codeEnum); } - + @ApiOperation(value = "删除角色",notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name = "roleId", value = "角色Id", required = true, paramType = "query") + }) + @RequestMapping(value = "", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) + public JsonResponse deleteTask(HttpServletRequest request, + @RequestParam(required = false)Long roleId) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + proRoleService.deleteRole(currentUserId,roleId); + return JsonResponse.newInstance().ok(); + } } diff --git a/tall/src/main/java/com/ccsens/tall/web/ProjectController.java b/tall/src/main/java/com/ccsens/tall/web/ProjectController.java index 94c72916..7fa07ba3 100644 --- a/tall/src/main/java/com/ccsens/tall/web/ProjectController.java +++ b/tall/src/main/java/com/ccsens/tall/web/ProjectController.java @@ -1,5 +1,6 @@ package com.ccsens.tall.web; +import com.ccsens.tall.bean.dto.ProjectDto; import com.ccsens.tall.bean.vo.ProjectVo; import com.ccsens.tall.bean.vo.TaskVo; import com.ccsens.tall.service.IProMemberService; @@ -14,6 +15,7 @@ import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -193,22 +195,23 @@ public class ProjectController { @ApiOperation(value = "根据模板复制项目", notes = "") @ApiImplicitParams({ - @ApiImplicitParam(name = "projectId", value = "项目id", required = true, paramType = "query") }) @RequestMapping(value = "copy", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse addProject(HttpServletRequest request,@RequestParam(required = false) Long projectId) throws Exception { + public JsonResponse addProject(HttpServletRequest request, + @Validated @RequestBody ProjectDto.ProjectIdDto projectDto) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); - ProjectVo.ProjectInfo projectInfo = projectService.copyProject(currentUserId,projectId); + ProjectVo.ProjectInfo projectInfo = projectService.copyProject(currentUserId,projectDto); return JsonResponse.newInstance().ok(projectInfo); } @ApiOperation(value = "修改项目信息", notes = "") @ApiImplicitParams({ - @ApiImplicitParam(name = "projectId", value = "项目id", required = true, paramType = "query") }) - @RequestMapping(value = "update", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) - public JsonResponse updateProject(HttpServletRequest request,@RequestParam(required = false) Long projectId) throws Exception { + @RequestMapping(value = "change", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateProject(HttpServletRequest request, + @Validated @RequestBody ProjectDto.ProjectInfoDto projectInfoDto) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); - return JsonResponse.newInstance().ok(); + ProjectVo.ProjectInfo projectInfo = projectService.changeProjectInfo(currentUserId,projectInfoDto); + return JsonResponse.newInstance().ok(projectInfo); } } diff --git a/tall/src/main/java/com/ccsens/tall/web/TaskController.java b/tall/src/main/java/com/ccsens/tall/web/TaskController.java index b0084d93..155f9cfe 100644 --- a/tall/src/main/java/com/ccsens/tall/web/TaskController.java +++ b/tall/src/main/java/com/ccsens/tall/web/TaskController.java @@ -126,11 +126,24 @@ public class TaskController { @ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query") }) @RequestMapping(value = "", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) - public JsonResponse deleteTask(HttpServletRequest request, - @RequestParam(required = false)Long taskId) throws Exception { + public JsonResponse deleteTask(HttpServletRequest request, + @RequestParam(required = false)Long taskId) throws Exception { Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); taskDetailService.deleteTask(currentUserId,taskId); return JsonResponse.newInstance().ok(); } + + @ApiOperation(value = "修改任务信息",notes = "") + @ApiImplicitParams({ + @ApiImplicitParam(name = "taskId", value = "任务id", required = true, paramType = "query") + }) + @RequestMapping(value = "change", method = RequestMethod.DELETE, produces = {"application/json;charset=UTF-8"}) + public JsonResponse updateTask(HttpServletRequest request, + @Validated @RequestBody TaskDto.UpdateTaskInfo updateTaskInfo) throws Exception { + Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject()); + TaskVo.NormalTask taskInfo = taskDetailService.updateTaskInfo(currentUserId,updateTaskInfo); + return JsonResponse.newInstance().ok(taskInfo); + } + } diff --git a/util/src/main/java/com/ccsens/util/CodeEnum.java b/util/src/main/java/com/ccsens/util/CodeEnum.java index 21010634..50f685be 100644 --- a/util/src/main/java/com/ccsens/util/CodeEnum.java +++ b/util/src/main/java/com/ccsens/util/CodeEnum.java @@ -34,7 +34,7 @@ public enum CodeEnum { WBS_NOT_FIRST_ROLE(22,"系统角色名称错误",true), WBS_REPEAT_ROLE_NAME(23,"角色名称重复",true), WSB_NOT_MEMBER(24,"未找到对应成员,请检查成员姓名是否正确", true), - WBS_NOT_FIND_ROLE(25,"找不到对应的角色,请检查对谁不可见一列的名字与格式",true), + WBS_NOT_FIND_ROLE(25,"未找到对应的角色,请检查对谁不可见一列的名字与格式",true), WBS_NOT_TASK_NAME(26,"任务名不能为空",true), WBS_NOT_FIND_EXECUTOR_ROLE(27,"找不到负责人,请检查负责人的名称",true), WBS_NOT_FIND_CHECKER_ROLE(28,"找不到检查人,请检查检查人的名称",true), @@ -42,25 +42,28 @@ public enum CodeEnum { WBS_SUB_TASK_ANALYSIS(30,"无法解析此子日程表",true), WBS_NOT_SUB_TASK(31,"找不到对应的子日程表,请检查子日程表的名字是否正确",true), WBS_NOT_PLUGIN_SHEET(32,"未找到插件表",true), - WBS_NOT_PLUGIN(33,"找不到对应的插件,请确认是否填写正确",true), + WBS_NOT_PLUGIN(33,"未找到对应的插件,请确认是否填写正确",true), PROJECT_DATE_FORMAT_ERROR(34,"输入的日期格式错误,有效日期格式 例:2019-01-01或2019-01",true), TASK_NOT_UPLOAD_DELIVER(35,"交付物未上传,无法完成任务",true), - NOT_PROJECT(36,"找不到该项目",true), - NOT_ROLE(37,"找不到该角色",true), - NOT_DELIVER(38,"找不到对应的交付物",true), - NOT_TASK(39,"找不到对应的任务",true), - NOT_DELIVER_FILE(40,"找不到文件",true), - IS_NOT_EXECUTOR(41,"您不是该任务负责人",true), + NOT_PROJECT(36,"对不起,找不到该项目",true), + NOT_ROLE(37,"对不起,找不到该角色",true), + NOT_DELIVER(38,"对不起,找不到对应的交付物",true), + NOT_TASK(39,"对不起,找不到对应的任务",true), + NOT_DELIVER_FILE(40,"对不起,找不到文件",true), + IS_NOT_EXECUTOR(41,"对不起,您不是该任务负责人",true), NOT_CHECKER(42,"请选择检查人",true), SUB_TASK_IS_NOT_FINISH(43,"分组内任务未全部完成",true), - IS_NOT_CHECKER(44,"你不是该交付物的检查人",true), - NOT_POWER(45,"权限不足,无法操作",true), + IS_NOT_CHECKER(44,"您不是该交付物的检查人",true), + NOT_POWER(45,"对不起,您的权限不足,无法进行此操作",true), SMS_CODE_CORRECT(46,"验证信息错误",true), QUESTION_RULE_NOT_FOUND(47,"该评测规则未知,请联系开发人员。", true), REPORT_DOCTOR_ERROR(48, "对不起,您没有修改报告单结果的权限。", true), NOT_LOGIN(49, "对不起,您尚未登录或登录已失效,请重新登录。", true), + + REPEAT_PROJECT_NAME(50,"项目名不能重复,请修改后重试",true), + TIME_ERROR_BEGIN(51,"时间异常,开始时间不能大于结束时间",true) ; public CodeEnum addMsg(String msg){ diff --git a/util/src/main/java/com/ccsens/util/WebConstant.java b/util/src/main/java/com/ccsens/util/WebConstant.java index 62518eb7..5628d1d2 100644 --- a/util/src/main/java/com/ccsens/util/WebConstant.java +++ b/util/src/main/java/com/ccsens/util/WebConstant.java @@ -72,7 +72,7 @@ public class WebConstant { public static final String UPLOAD_PATH_PREVIEW ="preview"; public static final String UPLOAD_PROJECT_WBS = UPLOAD_PATH_BASE + File.separator + "project"; public static final String URL_BASE = "https://api.ccsens.com/ptpro/uploads/"; - public static final String TEST_URL_BASE = "https://test.tall.wiki/pt-dev/uploads/"; + public static final String TEST_URL_BASE = "https://test.tall.wiki/gateway/tall/v1.0/uploads/"; public static final Integer Expired_Verify_Code_In_Seconds = 120; public static final Integer Exist_Verify_Code_In_Seconds = 60;