Browse Source

修改导入

master
zy_Java 4 years ago
parent
commit
7cf1dcb5be
  1. 7
      pom.xml
  2. 17
      src/main/java/com/ccsens/defaultwbs/api/PluginController.java
  3. 15
      src/main/java/com/ccsens/defaultwbs/api/ProjectController.java
  4. 10
      src/main/java/com/ccsens/defaultwbs/api/RoleController.java
  5. 21
      src/main/java/com/ccsens/defaultwbs/api/TaskController.java
  6. 7
      src/main/java/com/ccsens/defaultwbs/api/WbsController.java
  7. 10
      src/main/java/com/ccsens/defaultwbs/bean/dto/ProjectDto.java
  8. 11
      src/main/java/com/ccsens/defaultwbs/persist/dao/ProMemberDao.java
  9. 11
      src/main/java/com/ccsens/defaultwbs/persist/dao/ProRoleDao.java
  10. 11
      src/main/java/com/ccsens/defaultwbs/persist/dao/ProTaskDetailDao.java
  11. 10
      src/main/java/com/ccsens/defaultwbs/persist/dao/SPluginDao.java
  12. 16
      src/main/java/com/ccsens/defaultwbs/persist/dao/SProjectDao.java
  13. 23
      src/main/java/com/ccsens/defaultwbs/persist/dao/STaskDao.java
  14. 2
      src/main/java/com/ccsens/defaultwbs/service/IImportService.java
  15. 333
      src/main/java/com/ccsens/defaultwbs/service/ImportService.java
  16. 16
      src/main/java/com/ccsens/defaultwbs/util/Constant.java
  17. 3
      src/main/java/com/ccsens/defaultwbs/util/DefaultCodeError.java
  18. 11
      src/main/resources/application-dev.yml
  19. 10
      src/main/resources/application-prod.yml
  20. 2
      src/main/resources/application-test.yml
  21. 4
      src/main/resources/application.yml
  22. 8
      src/main/resources/druid-prod.yml
  23. 15
      src/main/resources/mapper_dao/SPluginDao.xml
  24. 26
      src/main/resources/mapper_dao/SProjectDao.xml
  25. 38
      src/main/resources/mapper_dao/STaskDao.xml

7
pom.xml

@ -43,13 +43,6 @@
</dependency>
<!-- &lt;!&ndash; hutool-all &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>cn.hutool</groupId>-->
<!-- <artifactId>hutool-all</artifactId>-->
<!-- <version>4.1.21</version>-->
<!-- </dependency>-->
</dependencies>
<build>

17
src/main/java/com/ccsens/defaultwbs/api/PluginController.java

@ -1,5 +1,8 @@
package com.ccsens.defaultwbs.api;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.common.bean.dto.CPluginDto;
import com.ccsens.common.service.IPluginService;
import com.ccsens.defaultwbs.bean.dto.PluginDto;
import com.ccsens.defaultwbs.bean.dto.ProjectDto;
import com.ccsens.defaultwbs.bean.vo.PluginVo;
@ -16,6 +19,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;
/**
* @author
*/
@ -24,11 +30,14 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/plugin")
@Slf4j
public class PluginController {
@Resource
private IPluginService pluginService;
@ApiOperation(value = "根据id查询插件信息", notes = "根据id查询项目信息")
@RequestMapping(value = "", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<PluginVo.PluginInfo> getPluginById(@ApiParam @Validated @RequestBody QueryDto<PluginDto.GetPlugin> params) throws Exception{
@MustLogin
@ApiOperation(value = "给任务添加插件", notes = "")
@RequestMapping(value = "/save", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse queryPatientList(@ApiParam @Validated @RequestBody QueryDto<List<CPluginDto.UpdateTaskPlugin>> params) throws Exception{
pluginService.updateTaskPlugin(params.getParam());
return JsonResponse.newInstance().ok();
}
}

15
src/main/java/com/ccsens/defaultwbs/api/ProjectController.java

@ -1,7 +1,9 @@
package com.ccsens.defaultwbs.api;
import com.ccsens.common.bean.dto.CProjectDto;
import com.ccsens.common.bean.vo.CProjectVo;
import com.ccsens.common.service.IProjectService;
import com.ccsens.defaultwbs.bean.dto.ProjectDto;
import com.ccsens.defaultwbs.bean.vo.ProjectVo;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
@ -14,6 +16,8 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author
*/
@ -23,10 +27,13 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j
public class ProjectController {
@Resource
private IProjectService projectService;
@ApiOperation(value = "根据id查询项目信息", notes = "根据id查询项目信息")
@RequestMapping(value = "/findProjectById", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<ProjectVo.ProjectInfo> findProjectById(@ApiParam @Validated @RequestBody QueryDto<ProjectDto.ProjectById> params) throws Exception{
return JsonResponse.newInstance().ok();
public JsonResponse<CProjectVo.ProjectInfo> findProjectById(@ApiParam @Validated @RequestBody QueryDto<CProjectDto.ProjectById> params) throws Exception{
CProjectVo.ProjectInfo projectById = projectService.findProjectById(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(projectById);
}
}

10
src/main/java/com/ccsens/defaultwbs/api/RoleController.java

@ -1,9 +1,9 @@
package com.ccsens.defaultwbs.api;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.common.bean.vo.RoleVo;
import com.ccsens.common.bean.dto.CRoleDto;
import com.ccsens.common.bean.vo.CRoleVo;
import com.ccsens.common.service.IProRoleService;
import com.ccsens.common.bean.dto.RoleDto;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
@ -32,15 +32,15 @@ public class RoleController {
@MustLogin
@ApiOperation(value = "根据项目id查找角色", notes = "")
@RequestMapping(value = "/show", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<RoleVo.QueryRole> queryByProjectId(@ApiParam @Validated @RequestBody QueryDto<RoleDto.QueryRoleById> params) {
RoleVo.QueryRole queryRole = roleService.QueryShowRole(params.getParam(), params.getUserId());
public JsonResponse<CRoleVo.QueryRole> queryByProjectId(@ApiParam @Validated @RequestBody QueryDto<CRoleDto.QueryRoleById> params) {
CRoleVo.QueryRole queryRole = roleService.QueryShowRole(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(queryRole);
}
@MustLogin
@ApiOperation(value = "修改角色展示", notes = "")
@RequestMapping(value = "/updateShow", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse updateShow(@ApiParam @Validated @RequestBody QueryDto<RoleDto.UpdateRoleShow> params) {
public JsonResponse updateShow(@ApiParam @Validated @RequestBody QueryDto<CRoleDto.UpdateRoleShow> params) {
roleService.updateShowRole(params.getParam(),params.getUserId());
return JsonResponse.newInstance().ok();
}

21
src/main/java/com/ccsens/defaultwbs/api/TaskController.java

@ -1,9 +1,10 @@
package com.ccsens.defaultwbs.api;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.common.bean.dto.TaskDto;
import com.ccsens.common.bean.vo.TaskVo;
import com.ccsens.common.bean.dto.CTaskDto;
import com.ccsens.common.bean.vo.CTaskVo;
import com.ccsens.common.service.ITaskService;
import com.ccsens.defaultwbs.bean.vo.TaskVo;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
@ -33,32 +34,32 @@ public class TaskController {
@MustLogin
@ApiOperation(value = "查找永久日常任务", notes = "")
@RequestMapping(value = "/permanent", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.QueryTask>> queryPermanentGlobalTask(@ApiParam @Validated @RequestBody QueryDto<TaskDto.QueryPermanentGlobalTask> params) {
List<TaskVo.QueryTask> queryTasks = taskService.queryPermanentGlobalTask(params.getParam(), params.getUserId());
public JsonResponse<List<CTaskVo.QueryTask>> queryPermanentGlobalTask(@ApiParam @Validated @RequestBody QueryDto<CTaskDto.QueryPermanentGlobalTask> params) {
List<CTaskVo.QueryTask> queryTasks = taskService.queryPermanentGlobalTask(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(queryTasks);
}
@MustLogin
@ApiOperation(value = "查找带时间的日常任务", notes = "")
@RequestMapping(value = "/global", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.QueryTask>> queryGlobalTask(@ApiParam @Validated @RequestBody QueryDto<TaskDto.QueryGlobalTask> params) {
List<TaskVo.QueryTask> queryTasks = taskService.queryGlobalTask(params.getParam(), params.getUserId());
public JsonResponse<List<CTaskVo.QueryTask>> queryGlobalTask(@ApiParam @Validated @RequestBody QueryDto<CTaskDto.QueryGlobalTask> params) {
List<CTaskVo.QueryTask> queryTasks = taskService.queryGlobalTask(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(queryTasks);
}
@MustLogin
@ApiOperation(value = "查找定期任务", notes = "")
@RequestMapping(value = "/regular", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.QueryTask>> queryRegularTask(@ApiParam @Validated @RequestBody QueryDto<TaskDto.QueryRegularTask> params) {
List<TaskVo.QueryTask> queryTasks = taskService.queryRegularTask(params.getParam(), params.getUserId());
public JsonResponse<List<CTaskVo.QueryTask>> queryRegularTask(@ApiParam @Validated @RequestBody QueryDto<CTaskDto.QueryRegularTask> params) {
List<CTaskVo.QueryTask> queryTasks = taskService.queryRegularTask(params.getParam(), params.getUserId());
return JsonResponse.newInstance().ok(queryTasks);
}
@MustLogin
@ApiOperation(value = "修改任务状态", notes = "")
@RequestMapping(value = "/type", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse updateTaskType(@ApiParam @Validated @RequestBody QueryDto<TaskDto.UpdateTaskType> params) {
public JsonResponse updateTaskType(@ApiParam @Validated @RequestBody QueryDto<CTaskDto.UpdateTaskType> params) throws Exception {
taskService.updateTaskType(params.getParam(),params.getUserId());
return JsonResponse.newInstance().ok();
}
}

7
src/main/java/com/ccsens/defaultwbs/api/WbsController.java

@ -5,6 +5,7 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.defaultwbs.bean.dto.ProjectDto;
import com.ccsens.defaultwbs.service.IImportService;
import com.ccsens.defaultwbs.util.Constant;
import com.ccsens.defaultwbs.util.DefaultCodeError;
@ -38,10 +39,10 @@ public class WbsController {
@MustLogin
@ApiOperation(value = "导入WBS",notes = "文件大小不能超过20M,支持后缀:.xls|.xlsx")
@ApiImplicitParams({
@ApiImplicitParam(name = "file", value = "WBS表", required = true, paramType = "form",dataType = "__file")
// @ApiImplicitParam(name = "file", value = "WBS表", required = true, paramType = "form",dataType = "__file")
})
@RequestMapping(value = "", method = RequestMethod.POST)
public JsonResponse importWbs( QueryDto<MultipartFile> params) throws Exception {
public JsonResponse importWbs(QueryDto<MultipartFile> params,Long projectId) throws Exception {
MultipartFile f = params.getParam();
String ext = FileUtil.extName(f.getOriginalFilename());
@ -61,7 +62,7 @@ public class WbsController {
FileUtil.writeFromStream(f.getInputStream(), fullPath);
//导入数据库
importService.importWbs(fullPath,params.getUserId());
importService.importWbs(fullPath,params.getUserId(),projectId);
return JsonResponse.newInstance().ok();
}

10
src/main/java/com/ccsens/defaultwbs/bean/dto/ProjectDto.java

@ -3,6 +3,7 @@ package com.ccsens.defaultwbs.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotNull;
@ -16,4 +17,13 @@ public class ProjectDto {
@ApiModelProperty("项目id")
private Long projectId;
}
@Data
@ApiModel("导入wbs")
public static class ImportWbs {
@ApiModelProperty("wbs文件")
private MultipartFile file;
@ApiModelProperty("项目id")
private Long id;
}
}

11
src/main/java/com/ccsens/defaultwbs/persist/dao/ProMemberDao.java

@ -1,11 +0,0 @@
//package com.ccsens.defaultwbs.persist.dao;
//
//import com.ccsens.common.persist.mapper.ProMemberMapper;
//import org.springframework.stereotype.Repository;
//
///**
// * @author 逗
// */
//@Repository
//public interface ProMemberDao extends ProMemberMapper {
//}

11
src/main/java/com/ccsens/defaultwbs/persist/dao/ProRoleDao.java

@ -1,11 +0,0 @@
//package com.ccsens.defaultwbs.persist.dao;
//
//import com.ccsens.common.persist.mapper.ProRoleMapper;
//import org.springframework.stereotype.Repository;
//
///**
// * @author 逗
// */
//@Repository
//public interface ProRoleDao extends ProRoleMapper {
//}

11
src/main/java/com/ccsens/defaultwbs/persist/dao/ProTaskDetailDao.java

@ -1,11 +0,0 @@
//package com.ccsens.defaultwbs.persist.dao;
//
//import com.ccsens.common.persist.mapper.ProTaskDetailMapper;
//import org.springframework.stereotype.Repository;
//
///**
// * @author 逗
// */
//@Repository
//public interface ProTaskDetailDao extends ProTaskDetailMapper {
//}

10
src/main/java/com/ccsens/defaultwbs/persist/dao/SPluginDao.java

@ -0,0 +1,10 @@
package com.ccsens.defaultwbs.persist.dao;
import org.apache.ibatis.annotations.Param;
/**
* @author
*/
public interface SPluginDao {
Long getPluginIdByName(@Param("pluginName") String pluginName);
}

16
src/main/java/com/ccsens/defaultwbs/persist/dao/SProjectDao.java

@ -0,0 +1,16 @@
package com.ccsens.defaultwbs.persist.dao;
import com.ccsens.defaultwbs.bean.vo.ProjectVo;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* @author
*/
@Repository
public interface SProjectDao {
List<ProjectVo.SysProject> queryByCreator(@Param("userId") Long userId);
}

23
src/main/java/com/ccsens/defaultwbs/persist/dao/STaskDao.java

@ -0,0 +1,23 @@
package com.ccsens.defaultwbs.persist.dao;
import com.ccsens.common.bean.po.ProTaskSub;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* @author
*/
public interface STaskDao {
void insertSelectiveList(@Param("proTaskSubList") List<ProTaskSub> proTaskSubList);
/**
* 根据任务名和项目id查找当前时间下的任务的分解id
* @param taskName 任务名
* @param projectId 项目id
* @param now 当前时间
* @return 返回任务分解id
*/
Long getNowTask(@Param("taskName") String taskName, @Param("projectId") Long projectId, @Param("now") long now);
}

2
src/main/java/com/ccsens/defaultwbs/service/IImportService.java

@ -11,6 +11,6 @@ public interface IImportService {
* @param userId userId
* @throws Exception 异常
*/
void importWbs(String path, Long userId) throws Exception;
void importWbs(String path, Long userId,Long projectId) throws Exception;
}

333
src/main/java/com/ccsens/defaultwbs/service/ImportService.java

@ -1,23 +1,25 @@
package com.ccsens.defaultwbs.service;
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.cloudutil.bean.tall.vo.UserVo;
import com.ccsens.cloudutil.feign.TallFeignClient;
import com.ccsens.common.persist.dao.*;
import com.ccsens.common.bean.po.*;
import com.ccsens.common.bean.vo.ProjectVo;
import com.ccsens.common.persist.mapper.*;
import com.ccsens.defaultwbs.bean.vo.ProjectVo;
import com.ccsens.defaultwbs.persist.dao.SProjectDao;
import com.ccsens.defaultwbs.persist.dao.SPluginDao;
import com.ccsens.defaultwbs.persist.dao.STaskDao;
import com.ccsens.defaultwbs.persist.dao.SubLabelDao;
import com.ccsens.common.bean.po.LabelBusiness;
import com.ccsens.common.bean.po.ProMemberStakeholder;
import com.ccsens.defaultwbs.util.DefaultCodeError;
import com.ccsens.defaultwbs.util.Constant;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.ExcelUtil;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.StringUtil;
import com.ccsens.util.cron.CronConstant;
import com.ccsens.util.cron.NatureToDate;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.xssf.usermodel.XSSFCell;
@ -31,8 +33,9 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @author
@ -47,9 +50,9 @@ public class ImportService implements IImportService {
@Resource
private ProTaskDetailDao taskDetailDao;
@Resource
private ProTaskSubMapper taskSubMapper;
private ProTaskSubDao taskSubDao;
@Resource
private ProTaskVersionMapper taskVersionMapper;
private ProTaskVersionDao taskVersionMapper;
@Resource
private SubLabelDao subLabelDao;
@Resource
@ -63,13 +66,21 @@ public class ImportService implements IImportService {
@Resource
private ProRoleRepulsionDao repulsionDao;
@Resource
private LabelBusinessMapper labelBusinessMapper;
private LabelBusinessDao labelBusinessDao;
@Resource
private ProParentTaskMapper parentTaskMapper;
private ProParentTaskDao parentTaskMapper;
@Resource
private ProRoleTaskMapper roleTaskMapper;
private ProRoleTaskDao roleTaskMapper;
@Resource
private TallFeignClient tallFeignClient;
private UserDao userDao;
@Resource
private SProjectDao projectDao;
@Resource
private STaskDao sTaskDao;
@Resource
private SPluginDao sTaskPluginDao;
@Resource
private ProTaskPluginDao proTaskPluginDao;
/**
* 读取wbs文件
@ -78,12 +89,10 @@ public class ImportService implements IImportService {
* @throws Exception 异常
*/
@Override
public void importWbs(String path, Long userId) throws Exception {
public void importWbs(String path, Long userId,Long projectId) throws Exception {
//获取excel文件
InputStream is = new FileInputStream(path);
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
//项目
ProjectVo.SysProject project = new ProjectVo.SysProject();
//角色
Map<String, Long> roleMap = new HashMap<>();
//成员
@ -92,13 +101,13 @@ public class ImportService implements IImportService {
Map<String, Long> taskMap = new HashMap<>();
//读取文件
readExcel(xssfWorkbook, userId, project, roleMap, memberMap, taskMap);
readExcel(xssfWorkbook, userId, roleMap, memberMap, taskMap,projectId);
}
/**
* 读取每个sheet
*/
private void readExcel(XSSFWorkbook wb, Long userId, ProjectVo.SysProject project, Map<String, Long> roleMap, Map<String, Long> memberMap, Map<String, Long> taskMap) {
private void readExcel(XSSFWorkbook wb, Long userId, Map<String, Long> roleMap, Map<String, Long> memberMap, Map<String, Long> taskMap,Long projectId) {
//获取wbsSheet
XSSFSheet wbsSheet = wb.getSheet(Constant.WbsExcel.WBS_SHEET);
if (ObjectUtil.isNull(wbsSheet)) {
@ -140,7 +149,7 @@ public class ImportService implements IImportService {
throw new BaseException(DefaultCodeError.WSB_NOT_TASK_HEADER);
}
//添加项目
project = readProject(wbsSheet, projectStart, userId);
ProjectVo.SysProject project = readProject(wbsSheet, projectStart, userId,projectId);
if(ObjectUtil.isNull(project)){
throw new BaseException(DefaultCodeError.WSB_NOT_PROJECT_HEADER);
}
@ -148,12 +157,14 @@ public class ImportService implements IImportService {
readMemberSheet(memberSheet,project.getId(),roleMap,memberMap);
//添加任务
readTask(wbsSheet,taskStart,project,roleMap);
//TODO 在tall客户端添加项目和用户的关联信息
}
/**
* 读取项目信息
*/
private ProjectVo.SysProject readProject(XSSFSheet wbsSheet, int projectStart, Long userId) {
private ProjectVo.SysProject readProject(XSSFSheet wbsSheet, int projectStart, Long userId,Long projectId) {
ProjectVo.SysProject project = new ProjectVo.SysProject();
//获取项目信息的那一行
XSSFRow row = wbsSheet.getRow(projectStart + 1);
@ -173,9 +184,19 @@ public class ImportService implements IImportService {
//版本
String version = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5)));
if (StrUtil.isEmpty(projectName)) {
throw new BaseException(CodeEnum.WBS_NOT_PROJECT_NAME);
throw new BaseException(DefaultCodeError.WBS_NOT_PROJECT_NAME);
}
//项目名不能重复(当前用户创建的项目内名字不能重复)
//根据userId查找已创建的项目
List<ProjectVo.SysProject> sysProjectList = projectDao.queryByCreator(userId);
if(CollectionUtil.isNotEmpty(sysProjectList)){
sysProjectList.forEach(p -> {
if(projectName.equalsIgnoreCase(p.getName())){
//如果名称重复则提示错误信息
throw new BaseException(DefaultCodeError.PROJECT_NAME_REPEAT);
}
});
}
//TODO 项目名不能重复(当前用户创建的项目内名字不能重复)
//判断时间是否正确
String begin = ExcelUtil.getCellValue(row.getCell(3));
String end = ExcelUtil.getCellValue(row.getCell(4));
@ -205,7 +226,7 @@ public class ImportService implements IImportService {
taskSub.setPlanStartTime(bTime);
taskSub.setPlanEndTime(eTime);
taskSub.setPlanDuration(eTime - bTime);
taskSubMapper.insertSelective(taskSub);
taskSubDao.insertSelective(taskSub);
project.setBeginTime(bTime);
project.setEndTime(eTime);
//添加版本信息
@ -219,8 +240,18 @@ public class ImportService implements IImportService {
Long labelId = subLabelDao.getLabelByTypeAndLevel(1, 0);
//添加任务标签关联信息
saveLabelTask(taskDetail.getId(), labelId);
//TODO 在tall客户端添加项目和用户的关联信息
//TODO 处理创建人的权限问题
//处理创建人的权限问题(添加创建人角色)
//查找创建者标签id
Long roleLabelId = subLabelDao.getLabelByTypeAndLevel(5, 5);
//添加创建者角色
ProRole role = new ProRole();
role.setId(snowflake.nextId());
role.setName("创建者");
role.setProjectId(taskDetail.getId());
role.setLabelId(roleLabelId);
roleDao.insertSelective(role);
return project;
}
@ -234,7 +265,7 @@ public class ImportService implements IImportService {
labelBusiness.setBusinessType((byte) 0);
labelBusiness.setBusinessId(taskDetailId);
labelBusiness.setLabelId(labelId);
labelBusinessMapper.insertSelective(labelBusiness);
labelBusinessDao.insertSelective(labelBusiness);
}
/**
@ -293,41 +324,38 @@ public class ImportService implements IImportService {
}
//添加成员
if(StrUtil.isNotEmpty(memberName) && !"/".equalsIgnoreCase(roleName)){
//TODO 根据成员手机号查找userId 成员关联userId
Long memberUserId = null;
JsonResponse<Long> result = tallFeignClient.getUserIdByPhone(memberPhone);
if (result.getCode() == CodeEnum.SUCCESS.getCode().longValue()) {
memberUserId = result.getData();
//如果成员名和手机号重复当做一个人来处理
Long memberId = memberMap.get(memberName + "_" + memberPhone);
if(ObjectUtil.isNull(memberId)){
//TODO 根据成员手机号查找userId 成员关联userId
Long userId = userDao.getUserIdByPhone(memberPhone);
//添加成员至数据库
ProMember proMember = new ProMember();
proMember.setId(snowflake.nextId());
proMember.setName(memberName);
proMember.setPhone(memberPhone);
proMember.setProjectId(projectId);
proMember.setUserId(userId);
memberDao.insertSelective(proMember);
memberMap.put(memberName+"_"+memberPhone,proMember.getId());
memberId = proMember.getId();
}
//添加成员至数据库
ProMember proMember = new ProMember();
proMember.setId(snowflake.nextId());
proMember.setName(memberName);
proMember.setPhone(memberPhone);
proMember.setProjectId(projectId);
proMember.setUserId(memberUserId);
memberDao.insertSelective(proMember);
memberMap.put(memberName+"_"+memberPhone,proMember.getId());
//添加角色成员关联信息
ProRoleMember roleMember = new ProRoleMember();
roleMember.setId(snowflake.nextId());
roleMember.setRoleId(roleId);
roleMember.setMemberId(proMember.getId());
roleMember.setMemberId(memberId);
roleMemberDao.insertSelective(roleMember);
//添加奖惩干系人
if(StrUtil.isNotEmpty(stakeholderName) && !"/".equalsIgnoreCase(roleName)){
//TODO 根据干系人手机号查找userId 奖惩干系人关联userId
Long stakeholderUserId = null;
JsonResponse<Long> stakeholderUser = tallFeignClient.getUserIdByPhone(stakeholderPhone);
if (result.getCode() == CodeEnum.SUCCESS.getCode().longValue()) {
stakeholderUserId = stakeholderUser.getData();
}
Long userId = userDao.getUserIdByPhone(memberPhone);
ProMemberStakeholder memberStakeholder = new ProMemberStakeholder();
memberStakeholder.setId(snowflake.nextId());
memberStakeholder.setMemeberId(proMember.getId());
memberStakeholder.setMemeberId(memberId);
memberStakeholder.setStakeholderName(stakeholderName);
memberStakeholder.setStakeholderPhone(stakeholderPhone);
memberStakeholder.setUserId(stakeholderUserId);
memberStakeholder.setUserId(userId);
memberStakeholderMapper.insertSelective(memberStakeholder);
}
}
@ -384,6 +412,7 @@ public class ImportService implements IImportService {
//一级任务id
Long firstTaskId = null;
Long taskStartTime = project.getBeginTime();
for (int i = taskStart + 1; i <= wbsSheet.getLastRowNum(); i++) {
//获取当前行
XSSFRow row = wbsSheet.getRow(i);
@ -412,6 +441,12 @@ public class ImportService implements IImportService {
String beginTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(4)));
//结束时间
String endTime = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(5)));
//时长
String duration = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(6)));
//插件
String plugin1 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(12)));
String plugin2 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(13)));
String plugin3 = StringUtil.replaceStrSpace(ExcelUtil.getCellValue(row.getCell(14)));
if(StrUtil.isNotEmpty(taskName)){
//添加二级任务信息(任务详情)
ProTaskDetail taskDetail = new ProTaskDetail();
@ -435,7 +470,7 @@ public class ImportService implements IImportService {
labelBusiness.setBusinessType((byte) 0);
labelBusiness.setBusinessId(taskDetail.getId());
labelBusiness.setLabelId(labelId);
labelBusinessMapper.insertSelective(labelBusiness);
labelBusinessDao.insertSelective(labelBusiness);
//任务和角色关联
if(StrUtil.isEmpty(executorRole)){
throw new BaseException(DefaultCodeError.WBS_NOT_FIND_ROLE);
@ -452,54 +487,180 @@ public class ImportService implements IImportService {
roleTask.setTaskId(taskDetail.getId());
roleTaskMapper.insertSelective(roleTask);
}
//处理时间、添加任务分解、添加任务标签
if(StrUtil.isEmpty(beginTime) || "日常".equalsIgnoreCase(beginTime)){
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetail.getId());
taskSubMapper.insertSelective(taskSub);
//查找日常任务标签并关联信息
Long label = subLabelDao.getLabelByTypeAndLevel(1, 2);
saveLabelTask(taskDetail.getId(),label);
}else {
Long bTime;
Long eTime;
try {
bTime = Long.parseLong(beginTime);
eTime = Long.parseLong(endTime);
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetail.getId());
taskSub.setPlanEndTime(eTime);
taskSub.setPlanStartTime(bTime);
taskSub.setPlanDuration(eTime - bTime);
taskSubMapper.insertSelective(taskSub);
//查找定期任务标签并关联任务
Long taskLabel = subLabelDao.getLabelByTypeAndLevel(1, 3);
saveLabelTask(taskDetail.getId(),taskLabel);
//添加时间颗粒度标签并关联
Long timeLabel = subLabelDao.getLabelByTypeAndLevel(0, 4);
saveLabelTask(taskDetail.getId(),timeLabel);
}catch (Exception e){
//TODO 其他情况暂不处理
throw new BaseException(DefaultCodeError.WBS_PROJECT_TIME_ERROR);
}
}
taskStartTime = taskSaveTime(taskStartTime, project, beginTime, endTime, duration, taskDetail.getId());
//添加时间颗粒度标签并关联
Long timeLabel = subLabelDao.getLabelByTypeAndLevel(0, 4);
saveLabelTask(taskDetail.getId(),timeLabel);
//TODO 插件
plugin(plugin1,taskDetail.getId(),1);
plugin(plugin2,taskDetail.getId(),2);
plugin(plugin3,taskDetail.getId(),3);
// //处理时间、添加任务分解、添加任务标签
// if(StrUtil.isEmpty(beginTime) || "日常".equalsIgnoreCase(beginTime)){
// //添加任务分解
// ProTaskSub taskSub = new ProTaskSub();
// taskSub.setId(snowflake.nextId());
// taskSub.setTaskDetailId(taskDetail.getId());
// taskSubMapper.insertSelective(taskSub);
// //查找日常任务标签并关联信息
// Long label = subLabelDao.getLabelByTypeAndLevel(1, 2);
// saveLabelTask(taskDetail.getId(),label);
// }else {
// Long bTime;
// Long eTime;
// try {
// bTime = Long.parseLong(beginTime);
// eTime = Long.parseLong(endTime);
// //添加任务分解
// ProTaskSub taskSub = new ProTaskSub();
// taskSub.setId(snowflake.nextId());
// taskSub.setTaskDetailId(taskDetail.getId());
// taskSub.setPlanEndTime(eTime);
// taskSub.setPlanStartTime(bTime);
// taskSub.setPlanDuration(eTime - bTime);
// taskSubMapper.insertSelective(taskSub);
// //查找定期任务标签并关联任务
// Long taskLabel = subLabelDao.getLabelByTypeAndLevel(1, 3);
// saveLabelTask(taskDetail.getId(),taskLabel);
// //添加时间颗粒度标签并关联
// Long timeLabel = subLabelDao.getLabelByTypeAndLevel(0, 4);
// saveLabelTask(taskDetail.getId(),timeLabel);
// }catch (Exception e){
// //TODO 其他情况暂不处理
// throw new BaseException(DefaultCodeError.WBS_PROJECT_TIME_ERROR);
// }
// }
}
//TODO 检查人
//TODO 及时奖惩
//TODO 交付物
//TODO 插件
//TODO 添加默认插件
}
}
private void plugin(String plugin,Long taskId,int row) {
if(StrUtil.isNotEmpty(plugin)){
//根据插件名称查找插件id
Long pluginId = sTaskPluginDao.getPluginIdByName(plugin);
if(ObjectUtil.isNull(pluginId)){
throw new BaseException(DefaultCodeError.PLUGIN_NAME_ERROR);
}
//添加插件
ProTaskPlugin proTaskPlugin = new ProTaskPlugin();
proTaskPlugin.setId(snowflake.nextId());
proTaskPlugin.setTaskDetailId(taskId);
proTaskPlugin.setPluginId(pluginId);
proTaskPlugin.setPlginRow(row);
proTaskPlugin.setPlginCol(1);
proTaskPlugin.setRowspan(1);
proTaskPlugin.setColspan(1);
proTaskPluginDao.insertSelective(proTaskPlugin);
}
}
private Long taskSaveTime(Long taskStartTime,ProjectVo.SysProject project, String beginTime, String endTime, String duration, Long taskDetailId) {
if(StrUtil.isEmpty(beginTime) || "日常".equalsIgnoreCase(beginTime)){
if(StrUtil.isEmpty(beginTime) && StrUtil.isNotEmpty(duration)){
//获取时长内的字符串
String str = "[0-9]";
Pattern pStr = Pattern.compile(str);
Matcher mStr = pStr.matcher(duration);
String trimStr = mStr.replaceAll("").trim();
Long aLong = Constant.WBS_DURATION.get(trimStr);
if(ObjectUtil.isNull(aLong)){
throw new BaseException(DefaultCodeError.WBS_PROJECT_TIME_ERROR);
}
//获取字符串内的数字
String num = "[^0-9]";
Pattern pNum = Pattern.compile(num);
Matcher mNum = pNum.matcher(duration);
String trimNum = mNum.replaceAll("").trim();
//计算时长
Long durationTime = Long.parseLong(trimNum) * aLong;
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
taskSub.setPlanDuration(durationTime);
taskSub.setPlanStartTime(taskStartTime);
taskStartTime += durationTime;
taskSub.setPlanEndTime(taskStartTime);
taskSubDao.insertSelective(taskSub);
//查找定期任务标签并关联任务
Long taskLabel = subLabelDao.getLabelByTypeAndLevel(1, 3);
saveLabelTask(taskDetailId,taskLabel);
}else {
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
taskSubDao.insertSelective(taskSub);
//查找日常任务标签并关联信息
Long label = subLabelDao.getLabelByTypeAndLevel(1, 2);
saveLabelTask(taskDetailId,label);
}
}else {
Long bTime;
Long eTime;
try {
bTime = Long.parseLong(beginTime);
eTime = Long.parseLong(endTime);
//添加任务分解
ProTaskSub taskSub = new ProTaskSub();
taskSub.setId(snowflake.nextId());
taskSub.setTaskDetailId(taskDetailId);
taskSub.setPlanEndTime(eTime);
taskSub.setPlanStartTime(bTime);
taskSub.setPlanDuration(eTime - bTime);
taskSubDao.insertSelective(taskSub);
//查找定期任务标签并关联任务
Long taskLabel = subLabelDao.getLabelByTypeAndLevel(1, 3);
saveLabelTask(taskDetailId,taskLabel);
//添加时间颗粒度标签并关联
Long timeLabel = subLabelDao.getLabelByTypeAndLevel(0, 4);
saveLabelTask(taskDetailId,timeLabel);
}catch (Exception e){
Date startDate = new Date(project.getBeginTime());
Date endDate = new Date(project.getEndTime());
try {
List<CronConstant.TaskDate> taskDateList =
NatureToDate.generateDates(beginTime, startDate, endDate);
if (CollectionUtil.isEmpty(taskDateList)) {
return taskStartTime;
}
List<ProTaskSub> proTaskSubList = new ArrayList<>();
for (CronConstant.TaskDate taskDate : taskDateList) {
ProTaskSub proTaskSub = new ProTaskSub();
proTaskSub.setId(snowflake.nextId());
proTaskSub.setTaskDetailId(taskDetailId);
proTaskSub.setPlanStartTime(taskDate.getStartDate().getTime());
proTaskSub.setPlanEndTime(taskDate.getEndDate().getTime());
proTaskSub.setPlanDuration(proTaskSub.getPlanEndTime() - proTaskSub.getPlanStartTime());
proTaskSubList.add(proTaskSub);
}
if(CollectionUtil.isNotEmpty(proTaskSubList)){
sTaskDao.insertSelectiveList(proTaskSubList);
}
}catch (Exception e1){
throw new BaseException(String.valueOf(e1));
// throw new BaseException(DefaultCodeError.WBS_PROJECT_TIME_ERROR);
}
}
}
return taskStartTime;
}
/**
* 添加一级任务
*/
private Long saveFirstTask(ProjectVo.SysProject project, String firstTaskName) {
Long firstTaskId;//添加一级任务信息(任务详情)
//TODO 一级任务负责人是项目经理
Long firstTaskId;
ProTaskDetail taskDetail = new ProTaskDetail();
taskDetail.setId(snowflake.nextId());
taskDetail.setName(firstTaskName);
@ -512,7 +673,7 @@ public class ImportService implements IImportService {
taskSub.setPlanStartTime(project.getBeginTime());
taskSub.setPlanEndTime(project.getEndTime());
taskSub.setPlanDuration(project.getEndTime() - project.getBeginTime());
taskSubMapper.insertSelective(taskSub);
taskSubDao.insertSelective(taskSub);
//任务关联信息(关联项目)
ProParentTask parentTask = new ProParentTask();
parentTask.setId(snowflake.nextId());

16
src/main/java/com/ccsens/defaultwbs/util/Constant.java

@ -1,5 +1,8 @@
package com.ccsens.defaultwbs.util;
import java.util.HashMap;
import java.util.Map;
/**
* @author
*/
@ -22,4 +25,17 @@ public class Constant {
/**excel文件格式验证*/
public static final String WBS_FILE_FORMAT = "xls,xlsx";
}
/**wbs表时长对应关系表*/
public static final Map<String,Long> WBS_DURATION = new HashMap<>();
static {
WBS_DURATION.put("s",1000L);
WBS_DURATION.put("min",60 * 1000L);
WBS_DURATION.put("h",60 * 60 * 1000L);
WBS_DURATION.put("d",24 * 60 * 60 * 1000L);
WBS_DURATION.put("w",7 * 24 * 60 * 60 * 1000L);
WBS_DURATION.put("m",30 * 24 * 60 * 60 * 1000L);
WBS_DURATION.put("y",365 * 24 * 60 * 60 * 1000L);
}
}

3
src/main/java/com/ccsens/defaultwbs/util/DefaultCodeError.java

@ -18,5 +18,8 @@ public class DefaultCodeError extends CodeError {
public static final Code FILE_FORMAT_ERROR = new Code(8,"不支持的格式类型", true);
public static final Code WBS_NOT_PROJECT_TIME = new Code(9,"项目时间不能为空", true);
public static final Code TASK_VITAL_LABEL_ERROR = new Code(9,"任务标签异常", true);
public static final Code WBS_NOT_PROJECT_NAME = new Code(10,"项目名称不能为空", true);
public static final Code PROJECT_NAME_REPEAT = new Code(11,"项目名称重复", true);
public static final Code PLUGIN_NAME_ERROR = new Code(12,"请填写正确的插件名称", true);
}

11
src/main/resources/application-dev.yml

@ -7,11 +7,16 @@ spring:
name: defaultwbs
datasource:
type: com.alibaba.druid.pool.DruidDataSource
# rabbitmq:
# host: 192.168.0.99
# password: 111111
# port: 5672
# username: admin
rabbitmq:
host: 192.168.0.99
password: 111111
host: 127.0.0.1
password: guest
port: 5672
username: admin
username: guest
redis:
database: 0
host: 127.0.0.1

10
src/main/resources/application-prod.yml

@ -1,5 +1,5 @@
server:
port: 7130
port: 7210
servlet:
context-path:
spring:
@ -8,7 +8,7 @@ spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
rabbitmq:
host: 127.0.0.1
host: 121.36.3.207
password: 111111
port: 5672
username: admin
@ -21,15 +21,15 @@ spring:
max-idle: 10
max-wait: -1ms
min-idle: 0
# password: ''
password: 'areowqr!@43ef'
password: ''
# password: 'areowqr!@43ef'
port: 6379
timeout: 1000ms
swagger:
enable: true
eureka:
instance:
ip-address: 121.36.3.207
ip-address: 121.36.106.168
gatewayUrl: https://www.tall.wiki/gateway/
notGatewayUrl: https://www.tall.wiki/

2
src/main/resources/application-test.yml

@ -40,7 +40,7 @@ mybatisCache:
timeout: 1000
eureka:
instance:
ip-address: 192.168.0.99
ip-address: 127.0.0.1
file:
path: /home/cloud/defaultwbs/uploads/

4
src/main/resources/application.yml

@ -1,4 +1,4 @@
spring:
profiles:
active: dev
include: common, util-dev
active: test
include: common, util-test

8
src/main/resources/druid-prod.yml

@ -15,7 +15,8 @@ spring:
maxWait: 60000
minEvictableIdleTimeMillis: 300000
minIdle: 5
password:
# password:
password: 68073a279b399baa1fa12cf39bfbb65bfc1480ffee7b659ccc81cf19be8c4473
poolPreparedStatements: true
servletLogSlowSql: true
servletLoginPassword: 111111
@ -27,7 +28,8 @@ spring:
testOnReturn: false
testWhileIdle: true
timeBetweenEvictionRunsMillis: 60000
url: jdbc:mysql://127.0.0.1/defaultwbs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
# url: jdbc:mysql://127.0.0.1/defaultwbs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
url: jdbc:mysql://test.tall.wiki/defaultwbs?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&autoReconnect=true
username: root
validationQuery: SELECT 1 FROM DUAL
env: CCSENS_GAME
env: CCSENS_TALL

15
src/main/resources/mapper_dao/SPluginDao.xml

@ -0,0 +1,15 @@
<?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.ccsens.defaultwbs.persist.dao.SPluginDao">
<select id="getPluginIdByName" resultType="java.lang.Long">
SELECT
id
FROM
`plugin`.t_pro_plugin
WHERE
`name` = #{pluginName}
and rec_status = 0
limit 1
</select>
</mapper>

26
src/main/resources/mapper_dao/SProjectDao.xml

@ -0,0 +1,26 @@
<?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.ccsens.defaultwbs.persist.dao.SProjectDao">
<select id="queryByCreator" resultType="com.ccsens.defaultwbs.bean.vo.ProjectVo$SysProject">
SELECT
t.id,
t.`name`
FROM
t_pro_member m,
t_pro_role_member rm,
t_pro_role r,
t_label l,
t_pro_task_detail t
WHERE
m.id = rm.member_id
and r.id = rm.role_id
and r.label_id = l.id
and l.`level` = 5
and r.project_id = t.id
and m.user_id = #{userId}
and m.rec_status = 0
and rm.rec_status = 0
and r.rec_status = 0
</select>
</mapper>

38
src/main/resources/mapper_dao/STaskDao.xml

@ -0,0 +1,38 @@
<?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.ccsens.defaultwbs.persist.dao.STaskDao">
<insert id="insertSelectiveList">
INSERT INTO t_pro_task_sub
(
id,
task_detail_id,
plan_start_time,
plan_end_time,
plan_duration
)
VALUES
<foreach collection="proTaskSubList" item="item" separator=",">
(#{item.id},#{item.taskDetailId},#{item.planStartTime},#{item.planEndTime},#{item.planDuration})
</foreach>
</insert>
<select id="getNowTask" resultType="java.lang.Long">
SELECT
s.id
FROM
t_pro_task_detail d
LEFT JOIN t_pro_parent_task p on d.id = p.task_detail_id
LEFT JOIN (SELECT * FROM t_pro_parent_task WHERE parent_task_detail_id = #{projectId}) p1 on p.parent_task_detail_id = p1.task_detail_id
LEFT JOIN
t_pro_task_sub s on d.id = s.task_detail_id and s.rec_status = 0
WHERE
`name` = #{taskName}
and s.plan_start_time &lt;= #{now}
and s.plan_end_time &gt;= #{now}
and d.rec_status = 0
and p.rec_status = 0
and p1.rec_status = 0
limit 1
</select>
</mapper>
Loading…
Cancel
Save