Browse Source

20200930_1.0

master
zy_Java 5 years ago
parent
commit
00fc4fe346
  1. 14
      mt/src/main/java/com/ccsens/mt/api/CompeteController.java
  2. 51
      mt/src/main/java/com/ccsens/mt/api/CompeteScoreController.java
  3. 9
      mt/src/main/java/com/ccsens/mt/api/DepartmentController.java
  4. 1
      mt/src/main/java/com/ccsens/mt/api/ScoreController.java
  5. 4
      mt/src/main/java/com/ccsens/mt/api/VideoController.java
  6. 5
      mt/src/main/java/com/ccsens/mt/bean/dto/CompeteDto.java
  7. 2
      mt/src/main/java/com/ccsens/mt/bean/dto/VideoDto.java
  8. 13
      mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java
  9. 6
      mt/src/main/java/com/ccsens/mt/bean/vo/VideoVo.java
  10. 2
      mt/src/main/java/com/ccsens/mt/service/CompeteService.java
  11. 222
      mt/src/main/java/com/ccsens/mt/service/DepartmentService.java
  12. 7
      mt/src/main/java/com/ccsens/mt/service/IDepartmentService.java
  13. 8
      mt/src/main/java/com/ccsens/mt/service/LevelUpService.java
  14. 87
      mt/src/main/java/com/ccsens/mt/service/ScoreService.java
  15. 8
      mt/src/main/java/com/ccsens/mt/service/VideoService.java
  16. 4
      mt/src/main/resources/application.yml
  17. 81
      mt/src/main/resources/mapper_dao/CompeteTeamDao.xml
  18. 19
      tall/src/main/java/com/ccsens/tall/bean/dto/PluginDto.java
  19. 11
      tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java
  20. 3
      tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java
  21. 11
      tall/src/main/java/com/ccsens/tall/bean/po/ProRole.java
  22. 60
      tall/src/main/java/com/ccsens/tall/bean/po/ProRoleExample.java
  23. 11
      tall/src/main/java/com/ccsens/tall/bean/po/ProTaskDetail.java
  24. 60
      tall/src/main/java/com/ccsens/tall/bean/po/ProTaskDetailExample.java
  25. 2
      tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java
  26. 46
      tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java
  27. 3
      tall/src/main/java/com/ccsens/tall/persist/dao/SysPluginDao.java
  28. 13
      tall/src/main/java/com/ccsens/tall/persist/dao/TaskDetailDao.java
  29. 3
      tall/src/main/java/com/ccsens/tall/persist/mapper/ProRoleMapper.java
  30. 33
      tall/src/main/java/com/ccsens/tall/service/ExcelService.java
  31. 9
      tall/src/main/java/com/ccsens/tall/service/IProTaskDetailService.java
  32. 6
      tall/src/main/java/com/ccsens/tall/service/ITaskPluginService.java
  33. 3
      tall/src/main/java/com/ccsens/tall/service/ProMemberService.java
  34. 125
      tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java
  35. 67
      tall/src/main/java/com/ccsens/tall/service/TaskPluginService.java
  36. 20
      tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java
  37. 22
      tall/src/main/java/com/ccsens/tall/service/UserInfoService.java
  38. 10
      tall/src/main/java/com/ccsens/tall/web/PluginController.java
  39. 2
      tall/src/main/java/com/ccsens/tall/web/ProjectController.java
  40. 8
      tall/src/main/java/com/ccsens/tall/web/TaskController.java
  41. 4
      tall/src/main/resources/application.yml
  42. 6
      tall/src/main/resources/mapper_dao/ProRoleDao.xml
  43. 14
      tall/src/main/resources/mapper_dao/SysPluginDao.xml
  44. 62
      tall/src/main/resources/mapper_dao/TaskDetailDao.xml
  45. 30
      tall/src/main/resources/mapper_raw/ProRoleMapper.xml
  46. 29
      tall/src/main/resources/mapper_raw/ProTaskDetailMapper.xml
  47. 9
      util/src/main/java/com/ccsens/util/PoiUtil.java
  48. 3
      util/src/main/java/com/ccsens/util/WebConstant.java
  49. 8
      util/src/main/java/com/ccsens/util/cron/CronConstant.java
  50. 24
      util/src/test/java/com/ccsens/util/Base64Test.java
  51. 6
      util/src/test/java/com/ccsens/util/TestQrCord.java

14
mt/src/main/java/com/ccsens/mt/api/CompeteController.java

@ -132,21 +132,13 @@ public class CompeteController {
return JsonResponse.newInstance().ok(competeTeamProject);
}
@MustLogin
@ApiOperation(value = "查询比赛项目上的参赛选手列表", notes = "")
@RequestMapping(value = "/get/players", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<CompeteVo.QueryPlayerList> queryPlayerList(@ApiParam @Validated @RequestBody QueryDto<CompeteDto.CompeteProjectId> params) {
log.info("查询比赛项目上的参赛选手列表:{}",params);
CompeteVo.QueryPlayerList playerList = competeService.queryPlayerList(params);
return JsonResponse.newInstance().ok(playerList);
}
// @MustLogin
// @ApiOperation(value = "查询比赛项目上的参赛选手列表", notes = "")
// @RequestMapping(value = "/get/players", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
// public JsonResponse<CompeteVo.QueryPlayerList> getPlayerList(@ApiParam @Validated @RequestBody QueryDto<CompeteDto.CompeteTimeAndType> params) {
// log.info("扫码加入团队:{}",params);
// public JsonResponse<CompeteVo.QueryPlayerList> queryPlayerList(@ApiParam @Validated @RequestBody QueryDto<CompeteDto.CompeteProjectId> params) {
// log.info("查询比赛项目上的参赛选手列表:{}",params);
// CompeteVo.QueryPlayerList playerList = competeService.queryPlayerList(params);
// return JsonResponse.newInstance().ok(playerList);
// }
}

51
mt/src/main/java/com/ccsens/mt/api/CompeteScoreController.java

@ -0,0 +1,51 @@
package com.ccsens.mt.api;
import com.ccsens.cloudutil.annotation.MustLogin;
import com.ccsens.mt.bean.dto.CompeteDto;
import com.ccsens.mt.bean.vo.CompeteVo;
import com.ccsens.mt.service.ICompeteService;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.bean.dto.QueryDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
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.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
* @author
*/
@Slf4j
@Api(tags = "线上体育竞技比赛", description = "")
@RestController
@RequestMapping("/compete")
public class CompeteScoreController {
@Resource
private ICompeteService competeService;
@MustLogin
@ApiOperation(value = "查询比赛项目上的参赛选手列表", notes = "")
@RequestMapping(value = "/get/playerList", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<CompeteVo.QueryPlayerList> queryPlayerList(@ApiParam @Validated @RequestBody QueryDto<CompeteDto.CompeteProjectId> params) {
log.info("查询比赛项目上的参赛选手列表:{}",params);
CompeteVo.QueryPlayerList playerList = competeService.queryPlayerList(params);
return JsonResponse.newInstance().ok(playerList);
}
// @MustLogin
// @ApiOperation(value = "查看单个选手的信息和分数", notes = "")
// @RequestMapping(value = "/get/player", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
// public JsonResponse<CompeteVo.QueryPlayerList> getPlayerInfo(@ApiParam @Validated @RequestBody QueryDto<CompeteDto.CompeteProjectId> params) {
// log.info("查询比赛项目上的参赛选手列表:{}",params);
// CompeteVo.QueryPlayerList playerList = competeService.queryPlayerList(params);
// return JsonResponse.newInstance().ok(playerList);
// }
}

9
mt/src/main/java/com/ccsens/mt/api/DepartmentController.java

@ -65,4 +65,13 @@ public class DepartmentController {
CompeteVo.DepartmentInfo department = departmentService.getDepartment(params);
return JsonResponse.newInstance().ok(department);
}
@ApiOperation(value = "导出excel表格", notes = "")
@RequestMapping(value = "/export/excel", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<CompeteVo.DepartmentInfo> exportExcel(@ApiParam @Validated @RequestBody CompeteDto.CompeteType params) {
log.info("导出excel表格:{}",params);
String excelPath = departmentService.exportExcel(params);
return JsonResponse.newInstance().ok(excelPath);
}
}

1
mt/src/main/java/com/ccsens/mt/api/ScoreController.java

@ -33,7 +33,6 @@ public class ScoreController {
})
@RequestMapping(value = "/score", method = RequestMethod.GET, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<ScoreVo.ScoreInfo>> getScoreLog(HttpServletRequest request,
@RequestParam Long roleId,
@RequestParam(required = true) Long taskId) throws Exception {
//获取userId
Long userId = userService.getUserIdByToken(request);

4
mt/src/main/java/com/ccsens/mt/api/VideoController.java

@ -44,10 +44,10 @@ public class VideoController {
}
@MustLogin
@ApiOperation(value = "上传视频信息", notes = "")
@ApiOperation(value = "上传视频信息", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/get", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
@RequestMapping(value = "/upload", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<VideoVo.GetVideoInfo>> uploadVideo(@RequestBody @ApiParam @Validated QueryDto<VideoDto.UploadVideo> params) {
log.info("查看选手上传的视频信息:{}",params.toString());
List<VideoVo.GetVideoInfo> getVideoInfoList = videoService.uploadVideo(params);

5
mt/src/main/java/com/ccsens/mt/bean/dto/CompeteDto.java

@ -39,6 +39,8 @@ public class CompeteDto {
@ApiModelProperty("比赛项目id(二级的)")
private Long competeProjectId;
}
@Data
@ApiModel
public static class CompeteProjectPlayer{
@ -162,9 +164,6 @@ public class CompeteDto {
@Data
@ApiModel("获取院系提交的报名信息")
public static class GetDepartmentInfo{
// @NotNull(message="请选择院系信息")
// @ApiModelProperty("院系id")
// private Long id;
@NotNull
@ApiModelProperty("比赛的类型,0跳绳省赛 1跳绳校内比赛")
private int type;

2
mt/src/main/java/com/ccsens/mt/bean/dto/VideoDto.java

@ -36,5 +36,7 @@ public class VideoDto {
private Long playerId;
@ApiModelProperty("视频文件id")
private Long videoFileId;
@ApiModelProperty("视频文件浏览路径")
private String videoFileUrl;
}
}

13
mt/src/main/java/com/ccsens/mt/bean/vo/CompeteVo.java

@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
@ -324,9 +325,13 @@ public class CompeteVo {
private String companyName;
@ApiModelProperty("是否通级 0否 1是")
private byte certificate;
@ApiModelProperty("录播视频信息")
private List<VideoVo.GetVideoInfo> videoInfoList;
@ApiModelProperty("分数")
private BigDecimal score;
}
@Data
@ApiModel("比赛项目下的个人信息")
@ApiModel("比赛项目下团队信息")
public static class TeamInfoByProject{
@ApiModelProperty("团队表Id")
private Long teamId;
@ -340,5 +345,11 @@ public class CompeteVo {
private int memberNums;
@ApiModelProperty("团队内的成员")
private List<CompeteTeamProjectMember> members;
@ApiModelProperty("录播视频信息")
private List<VideoVo.GetVideoInfo> videoInfoList;
@ApiModelProperty("分数")
private BigDecimal score;
}
}

6
mt/src/main/java/com/ccsens/mt/bean/vo/VideoVo.java

@ -16,9 +16,11 @@ public class VideoVo {
private Long videoId;
@ApiModelProperty("文件id")
private Long fileId;
// @ApiModelProperty("视频地址")
// private String videoUrl;
@ApiModelProperty("视频地址")
private String videoUrl;
@ApiModelProperty("上传时间")
private Long uploadTime;
}
}

2
mt/src/main/java/com/ccsens/mt/service/CompeteService.java

@ -292,7 +292,7 @@ public class CompeteService implements ICompeteService{
*/
@Override
public String getQrCodeByTeamId(QueryDto<CompeteDto.CompeteProjectPlayer> params) {
return competeTeamDao.getQrCodeByTeamId(params.getParam().getProjectPlayerId());
return PropUtil.imgDomain + competeTeamDao.getQrCodeByTeamId(params.getParam().getProjectPlayerId());
}
/**

222
mt/src/main/java/com/ccsens/mt/service/DepartmentService.java

@ -1,8 +1,10 @@
package com.ccsens.mt.service;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.mt.bean.dto.CompeteDto;
import com.ccsens.mt.bean.po.*;
import com.ccsens.mt.bean.vo.CompeteVo;
@ -10,16 +12,20 @@ import com.ccsens.mt.persist.dao.CompetePlayerDao;
import com.ccsens.mt.persist.dao.CompeteTeamDao;
import com.ccsens.mt.persist.dao.CompeteTimeDao;
import com.ccsens.mt.persist.mapper.*;
import com.ccsens.util.CodeEnum;
import com.ccsens.util.StringUtil;
import com.ccsens.util.*;
import com.ccsens.util.bean.dto.QueryDto;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
@ -220,12 +226,12 @@ public class DepartmentService implements IDepartmentService{
project.getSecondProjects().forEach(secondProject -> {
if (secondProject.getTeam() == 0) {
//不是团队比赛
secondProject.setManName(competePlayerDao.getMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 0));
secondProject.setWomanName(competePlayerDao.getMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 1));
secondProject.setManName(competePlayerDao.getMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 1));
secondProject.setWomanName(competePlayerDao.getMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 0));
secondProject.setMixedName(competePlayerDao.getMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 2));
} else {
secondProject.setManName(competePlayerDao.getTeamMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 0));
secondProject.setWomanName(competePlayerDao.getTeamMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 1));
secondProject.setManName(competePlayerDao.getTeamMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 1));
secondProject.setWomanName(competePlayerDao.getTeamMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 0));
secondProject.setMixedName(competePlayerDao.getTeamMemberNamesByProjectId(companyId,secondProject.getCompeteProjectId(), 2));
}
});
@ -236,4 +242,208 @@ public class DepartmentService implements IDepartmentService{
}
return departmentInfo;
}
/**
* 导出报名信息表
*/
@Override
public String exportExcel(CompeteDto.CompeteType competeType) {
// CompeteDto.CompeteType competeType = params.getParam();
Workbook wb = new XSSFWorkbook();
String path = null;
//查找所有院系信息
CompeteCompanyExample companyExample = new CompeteCompanyExample();
companyExample.createCriteria().andTypeEqualTo((byte) competeType.getType());
List<CompeteCompany> companyList = competeCompanyMapper.selectByExample(companyExample);
log.info("查询所有院系:{}",companyList);
if(CollectionUtil.isNotEmpty(companyList)){
for(CompeteCompany company : companyList) {
CompeteVo.DepartmentInfo departmentInfo = getDepartmentInfo(company.getId(), competeType.getType());
log.info("查询院系的报名详细信息:{}", departmentInfo);
if (ObjectUtil.isNotNull(departmentInfo)) {
//生成写入的数据
List<List<PoiUtil.PoiUtilCell>> list = generatePoiUtilCell(departmentInfo);
//写入excel
try {
path = writeExcel(wb, departmentInfo.getName(), list);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
return path;
}
private List<List<PoiUtil.PoiUtilCell>> generatePoiUtilCell(CompeteVo.DepartmentInfo departmentInfo) {
List<List<PoiUtil.PoiUtilCell>> list = new ArrayList<>();
//标题
List<PoiUtil.PoiUtilCell> title = new ArrayList<>();
title.add(new PoiUtil.PoiUtilCell(departmentInfo.getName(),3,1));
list.add(title);
//表头
List<PoiUtil.PoiUtilCell> header = new ArrayList<>();
header.add(new PoiUtil.PoiUtilCell("比赛项目"));
header.add(new PoiUtil.PoiUtilCell("分组"));
header.add(new PoiUtil.PoiUtilCell("参赛人员"));
list.add(header);
if(CollectionUtil.isNotEmpty(departmentInfo.getDepartmentProjects())){
departmentInfo.getDepartmentProjects().forEach(departmentProject -> {
if(CollectionUtil.isNotEmpty(departmentProject.getSecondProjects())){
for (int i = 0; i < departmentProject.getSecondProjects().size(); i++) {
int secondRows = 0;
CompeteVo.DepartmentSecondProject secondProject = departmentProject.getSecondProjects().get(i);
List<PoiUtil.PoiUtilCell> project = new ArrayList<>();
project.add(new PoiUtil.PoiUtilCell(departmentProject.getParentProjectName()+":"+secondProject.getCompeteProjectName()));
list.add(project);
if(secondProject.getTeam() == 0){
if(ObjectUtil.isNotNull(secondProject.getManName())) {
secondRows++;
project.add(new PoiUtil.PoiUtilCell("男子组"));
project.add(new PoiUtil.PoiUtilCell(secondProject.getManName()));
if(ObjectUtil.isNotNull(secondProject.getWomanName())) {
secondRows++;
List<PoiUtil.PoiUtilCell> group = new ArrayList<>();
group.add(new PoiUtil.PoiUtilCell());
group.add(new PoiUtil.PoiUtilCell("女子组"));
group.add(new PoiUtil.PoiUtilCell(secondProject.getWomanName()));
list.add(group);
}
if(ObjectUtil.isNotNull(secondProject.getMixedName())) {
secondRows++;
List<PoiUtil.PoiUtilCell> group = new ArrayList<>();
group.add(new PoiUtil.PoiUtilCell());
group.add(new PoiUtil.PoiUtilCell("男女混合组"));
group.add(new PoiUtil.PoiUtilCell(secondProject.getMixedName()));
list.add(group);
}
}else if(ObjectUtil.isNotNull(secondProject.getWomanName())){
secondRows++;
project.add(new PoiUtil.PoiUtilCell("女子组"));
project.add(new PoiUtil.PoiUtilCell(secondProject.getWomanName()));
if(ObjectUtil.isNotNull(secondProject.getMixedName())) {
secondRows++;
List<PoiUtil.PoiUtilCell> group = new ArrayList<>();
group.add(new PoiUtil.PoiUtilCell());
group.add(new PoiUtil.PoiUtilCell("男女混合组"));
group.add(new PoiUtil.PoiUtilCell(secondProject.getMixedName()));
list.add(group);
}
}else if(ObjectUtil.isNotNull(secondProject.getMixedName())){
secondRows++;
project.add(new PoiUtil.PoiUtilCell("男女混合组"));
project.add(new PoiUtil.PoiUtilCell(secondProject.getMixedName()));
}
}else {
secondRows++;
project.add(new PoiUtil.PoiUtilCell());
String playerNames = secondProject.getManName() == null ? "" : secondProject.getManName();
if(StrUtil.isNotEmpty(playerNames) && StrUtil.isNotEmpty(secondProject.getWomanName())){
playerNames += "、" + secondProject.getWomanName();
}else {
playerNames += secondProject.getWomanName() == null ? "" : secondProject.getWomanName();
}
if(StrUtil.isNotEmpty(playerNames) && StrUtil.isNotEmpty(secondProject.getMixedName())){
playerNames += "、" + secondProject.getMixedName();
}else {
playerNames += secondProject.getMixedName() == null ? "" : secondProject.getMixedName();
}
project.add(new PoiUtil.PoiUtilCell(playerNames));
}
// if(ObjectUtil.isNotNull(secondProject.getManName())) {
// secondRows++;
// project.add(new PoiUtil.PoiUtilCell("男子组"));
// project.add(new PoiUtil.PoiUtilCell(secondProject.getManName()));
// if(ObjectUtil.isNotNull(secondProject.getWomanName())) {
// secondRows++;
// List<PoiUtil.PoiUtilCell> group = new ArrayList<>();
// group.add(new PoiUtil.PoiUtilCell());
// group.add(new PoiUtil.PoiUtilCell("女子组"));
// group.add(new PoiUtil.PoiUtilCell(secondProject.getWomanName()));
// list.add(group);
// }
// if(ObjectUtil.isNotNull(secondProject.getMixedName())) {
// secondRows++;
// List<PoiUtil.PoiUtilCell> group = new ArrayList<>();
// group.add(new PoiUtil.PoiUtilCell());
// group.add(new PoiUtil.PoiUtilCell("男女混合组"));
// group.add(new PoiUtil.PoiUtilCell(secondProject.getMixedName()));
// list.add(group);
// }
// }else if(ObjectUtil.isNotNull(secondProject.getWomanName())){
// secondRows++;
// project.add(new PoiUtil.PoiUtilCell("女子组"));
// project.add(new PoiUtil.PoiUtilCell(secondProject.getWomanName()));
// if(ObjectUtil.isNotNull(secondProject.getMixedName())) {
// secondRows++;
// List<PoiUtil.PoiUtilCell> group = new ArrayList<>();
// group.add(new PoiUtil.PoiUtilCell());
// group.add(new PoiUtil.PoiUtilCell("男女混合组"));
// group.add(new PoiUtil.PoiUtilCell(secondProject.getMixedName()));
// list.add(group);
// }
// }else if(ObjectUtil.isNotNull(secondProject.getMixedName())){
// secondRows++;
// project.add(new PoiUtil.PoiUtilCell("男女混合组"));
// project.add(new PoiUtil.PoiUtilCell(secondProject.getMixedName()));
// }
PoiUtil.PoiUtilCell poiUtilCell = project.get(0);
poiUtilCell.setRowspan(secondRows);
}
}
});
}
List<PoiUtil.PoiUtilCell> blank = new ArrayList<>();
blank.add(new PoiUtil.PoiUtilCell("",3,1));
list.add(blank);
//领队裁判等信息
if(CollectionUtil.isNotEmpty(departmentInfo.getDepartmentRoles())){
List<PoiUtil.PoiUtilCell> role1 = new ArrayList<>();
List<PoiUtil.PoiUtilCell> role2 = new ArrayList<>();
List<PoiUtil.PoiUtilCell> role3 = new ArrayList<>();
departmentInfo.getDepartmentRoles().forEach(departmentRole -> {
if(departmentRole.getRole() == 0){
role1.add(new PoiUtil.PoiUtilCell("领队",1,1,666,28));
role1.add(new PoiUtil.PoiUtilCell("姓名:" + departmentRole.getName()));
role1.add(new PoiUtil.PoiUtilCell("手机号:" + departmentRole.getPhone(),1,1,666,42));
}
if(departmentRole.getRole() == 1){
role2.add(new PoiUtil.PoiUtilCell("裁判",1,1,666,28));
role2.add(new PoiUtil.PoiUtilCell("姓名:" + departmentRole.getName()));
role2.add(new PoiUtil.PoiUtilCell("手机号:" + departmentRole.getPhone(),1,1,666,42));
}
if(departmentRole.getRole() == 2){
role3.add(new PoiUtil.PoiUtilCell("填表人",1,1,666,28));
role3.add(new PoiUtil.PoiUtilCell("姓名:" + departmentRole.getName()));
role3.add(new PoiUtil.PoiUtilCell("手机号:" + departmentRole.getPhone(),1,1,666,42));
}
});
list.add(role1);
list.add(role2);
list.add(role3);
}
return list;
}
private String writeExcel(Workbook wb,String sheetName, List<List<PoiUtil.PoiUtilCell>> list) throws Exception {
PoiUtil.exportWB(sheetName, list, wb);
//生成文件
String fileName = "department/" + DateUtil.today() + "/" + System.currentTimeMillis() + ".xlsx";
String path = PropUtil.path + File.separator + fileName;
File tmpFile = new File(path);
if (!tmpFile.getParentFile().exists()) {
boolean mkdirs = tmpFile.getParentFile().mkdirs();
}
OutputStream stream = new FileOutputStream(tmpFile);
wb.write(stream);
stream.close();
return PropUtil.imgDomain + fileName;
}
}

7
mt/src/main/java/com/ccsens/mt/service/IDepartmentService.java

@ -38,4 +38,11 @@ public interface IDepartmentService {
* @return 返回报名信息
*/
CompeteVo.DepartmentInfo getDepartment(QueryDto<CompeteDto.GetDepartmentInfo> params);
/**
* 导出报名信息表
* @param params
* @return
*/
String exportExcel(CompeteDto.CompeteType params);
}

8
mt/src/main/java/com/ccsens/mt/service/LevelUpService.java

@ -3,6 +3,7 @@ package com.ccsens.mt.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 com.ccsens.mt.bean.dto.LevelDto;
import com.ccsens.mt.bean.po.*;
import com.ccsens.mt.bean.vo.LevelVo;
@ -73,10 +74,11 @@ public class LevelUpService implements ILevelUpService{
log.info("查找到的用户的选手信息:{}",levelUserList);
levelUser = levelUserList.get(0);
}
if(ObjectUtil.isNotNull(levelUser)) {
//添加晋级表
LevelUpExample levelUpExample = new LevelUpExample();
levelUpExample.createCriteria().andLevelUserIdEqualTo(levelUser.getId()).andCompeteCodeEqualTo(levelUpDto.getCompeteCode());
if(levelUpDao.countByExample(levelUpExample) == 0) {
if (levelUpDao.countByExample(levelUpExample) == 0) {
LevelUp levelUp = new LevelUp();
BeanUtil.copyProperties(levelUpDto, levelUp);
levelUp.setId(snowflake.nextId());
@ -84,9 +86,9 @@ public class LevelUpService implements ILevelUpService{
levelUpDao.insertSelective(levelUp);
//存入redis
String key = Constant.Redis.COMPETE_LEVEL + levelUpDto.getCompeteTimeId() + "_" + levelUpDto.getCompeteCode();
redisUtil.zsSet(key, levelUser, 0,3600 * 24 * 300);
redisUtil.zsSet(key, levelUser, 0, 3600 * 24 * 300);
}
}
}
/**

87
mt/src/main/java/com/ccsens/mt/service/ScoreService.java

@ -4,6 +4,7 @@ import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.SecureUtil;
import com.ccsens.cloudutil.bean.tall.vo.MemberVo;
@ -22,7 +23,6 @@ import com.ccsens.util.ExcelUtil;
import com.ccsens.util.JsonResponse;
import com.ccsens.util.WebConstant;
import com.ccsens.util.exception.BaseException;
import lombok.Data;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -33,34 +33,37 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
import static java.math.BigDecimal.ROUND_HALF_UP;
/**
* @author
*/
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class ScoreService implements IScoreService {
@Autowired
@Resource
private TallFeignClient tallFeignClient;
@Autowired
@Resource
private MtScoreDao scoreDao;
@Autowired
@Resource
private MtScoreLogDao scoreLogDao;
@Autowired
@Resource
private MtJudgeDao judgeDao;
@Autowired
@Resource
private IMessageService messageService;
@Autowired
@Resource
private Snowflake snowflake;
/**
* 获取评分项
*
* @param userId
* @param playerId
* @return
* @param userId 用户id
* @param playerId 被评分的任务或人
* @return 返回评分信息
*/
@Override
public List<ScoreVo.ScoreInfo> getScoreLog(Long userId, Long playerId) {
@ -85,7 +88,7 @@ public class ScoreService implements IScoreService {
scoreLogExample.createCriteria().andProjectIdEqualTo(taskInfo.getProjectId());
List<MtScoreLog> scoreLogList = scoreLogDao.selectByExample(scoreLogExample);
if (CollectionUtil.isNotEmpty(scoreLogList)) {
ScoreVo.ScoreInfo scoreInfo = null;
ScoreVo.ScoreInfo scoreInfo;
for (MtScoreLog mtScoreLog : scoreLogList) {
scoreInfo = new ScoreVo.ScoreInfo();
scoreInfo.setId(mtScoreLog.getId());
@ -112,8 +115,8 @@ public class ScoreService implements IScoreService {
/**
* 提交评分
*
* @param userId
* @param submitScore
* @param userId 用户id
* @param submitScore 提交的评分信息
*/
@Override
public void submitScore(Long userId, ScoreDto.SubmitScore submitScore) {
@ -171,8 +174,8 @@ public class ScoreService implements IScoreService {
/**
* 提交单项评分
*
* @param userId
* @param submitOnlyOneScore
* @param userId 用户id
* @param submitOnlyOneScore 提交的单项评分信息
*/
@Override
public void submitOnlyOneScore(Long userId, ScoreDto.SubmitOnlyOneScore submitOnlyOneScore) {
@ -216,16 +219,16 @@ public class ScoreService implements IScoreService {
/**
* 查看评分
*
* @param userId
* @param roleId
* @param playerId
* @return
* @param userId 用户id
* @param roleId 角色id
* @param playerId 查看的任务或人
* @return 返回评分信息
*/
@Override
public ScoreVo.AdminScore adminScore(Long userId, Long roleId, Long playerId) {
ScoreVo.AdminScore adminScore = new ScoreVo.AdminScore();
List<ScoreVo._adminScoreList> judgeScoreList = new ArrayList<>();
ScoreVo._adminScoreList judgeScore = new ScoreVo._adminScoreList();
ScoreVo._adminScoreList judgeScore;
// Score scoreMax = scoreDao.maxScore(playerId);//最高分
// Score scoreMin = scoreDao.minScore(playerId);//最低分
TaskVo.TaskInfoWithFeign taskInfo = tallFeignClient.getProjectId(playerId);
@ -291,7 +294,7 @@ public class ScoreService implements IScoreService {
}
//查找每个任务的分数
List<ScoreVo.RankingScore> rankingScoreList = new ArrayList<>();
ScoreVo.RankingScore rankingScore = null;
ScoreVo.RankingScore rankingScore;
if (CollectionUtil.isNotEmpty(taskIdList)) {
for (Long taskId : taskIdList) {
rankingScore = new ScoreVo.RankingScore();
@ -340,7 +343,7 @@ public class ScoreService implements IScoreService {
*/
private List<ScoreVo.JudgeScore> findJudgeScore(Long projectId, Long taskId) {
List<ScoreVo.JudgeScore> judgeScoreList = new ArrayList<>();
ScoreVo.JudgeScore judgeScore = null;
ScoreVo.JudgeScore judgeScore;
//查找项目下所有评委
MtJudgeExample judgeExample = new MtJudgeExample();
judgeExample.createCriteria().andProjectIdEqualTo(projectId);
@ -368,7 +371,7 @@ public class ScoreService implements IScoreService {
public void showScore(Long projectId, Long taskId) throws Exception {
SyncMessageWithShowDto scoreShow = new SyncMessageWithShowDto();
SyncMessageWithShowDto.Data data = new SyncMessageWithShowDto.Data();
SyncMessageWithShowDto.Data.Judge judge = null;
SyncMessageWithShowDto.Data.Judge judge;
List<SyncMessageWithShowDto.Data.Judge> judgeList = new ArrayList<>();
//项目
@ -462,14 +465,12 @@ public class ScoreService implements IScoreService {
/**
* 导出签字表
*
* @param projectId
* @param taskId
* @return
* @param projectId 项目id
* @param taskId 任务id
* @return 返回签字表路径
*/
@Override
public String exportExcel(Long projectId, Long taskId) throws Exception {
//返回excel地址
String excelPath = "";
//获取模板
ResourceLoader resourceLoader = new DefaultResourceLoader();
InputStream is = resourceLoader.getResource("classpath:template/judgeTemplate.xlsx").getInputStream();
@ -504,19 +505,17 @@ public class ScoreService implements IScoreService {
excel.write(stream);
//关闭流
stream.close();
String rePath = WebConstant.TEST_URL_BASE_MT + WebConstant.UPLOAD_PATH_BASE_MT_JUDGE + File.separator + extraPath + File.separator + path + ".xlsx";
return rePath;
return WebConstant.TEST_URL_BASE_MT + WebConstant.UPLOAD_PATH_BASE_MT_JUDGE + File.separator + extraPath + File.separator + path + ".xlsx";
}
/**
* 写入excel
*
* @param taskInfo
* @param judge
* @throws Exception
* @param taskInfo 任务和项目信息
* @param judge 评委信息
*/
public void writeExcel(TaskVo.TaskInfoWithFeign taskInfo, MtJudge judge, XSSFSheet judgeSheet) throws Exception {
XSSFCell industry = judgeSheet.getRow(5).getCell(3);
public void writeExcel(TaskVo.TaskInfoWithFeign taskInfo, MtJudge judge, XSSFSheet judgeSheet){
// XSSFCell industry = judgeSheet.getRow(5).getCell(3);
//项目名
XSSFCell projectName = judgeSheet.getRow(5).getCell(5);
projectName.setCellValue(taskInfo.getProjectName());
@ -547,9 +546,8 @@ public class ScoreService implements IScoreService {
/**
* 导出排名表
* @param projectId
* @return
* @throws Exception
* @param projectId 项目id
* @return 返回排名表信息
*/
@Override
public String rankingExcel(Long projectId) throws Exception {
@ -572,7 +570,7 @@ public class ScoreService implements IScoreService {
}
}
//保存地址
String filePath = SecureUtil.simpleUUID();
String filePath = IdUtil.simpleUUID();
String dir = WebConstant.UPLOAD_PATH_BASE + File.separator + WebConstant.UPLOAD_PATH_BASE_MT_JUDGE;
String extraPath = DateUtil.format(new Date(), "yyyyMMdd");
String ePath = dir + File.separator + extraPath + File.separator + filePath + ".xlsx";
@ -593,8 +591,8 @@ public class ScoreService implements IScoreService {
/**
* 获取总评分表
* @param projectId
* @return
* @param projectId 项目id
* @return 返回路径
*/
@Override
public String rankingAllExcel(Long projectId) throws Exception{
@ -644,7 +642,7 @@ public class ScoreService implements IScoreService {
}
//保存地址
String filePath = SecureUtil.simpleUUID();
String filePath = IdUtil.simpleUUID();
String dir = WebConstant.UPLOAD_PATH_BASE + File.separator + WebConstant.UPLOAD_PATH_BASE_MT_JUDGE;
String extraPath = DateUtil.format(new Date(), "yyyyMMdd");
String ePath = dir + File.separator + extraPath + File.separator + filePath + ".xlsx";
@ -659,8 +657,7 @@ public class ScoreService implements IScoreService {
excel.write(stream);
//关闭流
stream.close();
String path = WebConstant.TEST_URL_BASE_MT + WebConstant.UPLOAD_PATH_BASE_MT_JUDGE + File.separator + extraPath + File.separator + filePath + ".xlsx";
return path;
return WebConstant.TEST_URL_BASE_MT + WebConstant.UPLOAD_PATH_BASE_MT_JUDGE + File.separator + extraPath + File.separator + filePath + ".xlsx";
}
/*=====================================================*/

8
mt/src/main/java/com/ccsens/mt/service/VideoService.java

@ -9,6 +9,10 @@ import com.ccsens.mt.bean.po.CompeteVideoExample;
import com.ccsens.mt.bean.vo.VideoVo;
import com.ccsens.mt.persist.mapper.CompeteVideoMapper;
import com.ccsens.util.bean.dto.QueryDto;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
@ -17,6 +21,9 @@ import java.util.List;
/**
* @author
*/
@Slf4j
@Service
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public class VideoService implements IVideoService{
@Resource
private Snowflake snowflake;
@ -64,6 +71,7 @@ public class VideoService implements IVideoService{
competeVideo.setTeam(uploadVideo.getTeam());
competeVideo.setPlayerId(uploadVideo.getPlayerId());
competeVideo.setFileId(uploadVideo.getVideoFileId());
competeVideo.setVideoUrl(uploadVideo.getVideoFileUrl());
competeVideo.setUploadUserId(params.getUserId());
competeVideo.setTime(System.currentTimeMillis());
competeVideoMapper.insertSelective(competeVideo);

4
mt/src/main/resources/application.yml

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

81
mt/src/main/resources/mapper_dao/CompeteTeamDao.xml

@ -16,18 +16,41 @@
</resultMap>
<resultMap id="getTeamByProjectId" type="com.ccsens.mt.bean.vo.CompeteVo$TeamInfoByProject">
<id column="teamId" jdbcType="BIGINT" property="teamId" />
<result column="creatorId" jdbcType="BIGINT" property="creatorId" />
<result column="creatorName" jdbcType="VARCHAR" property="creatorName" />
<result column="certificate" jdbcType="TINYINT" property="certificate" />
<result column="memberNums" jdbcType="INT" property="memberNums" />
<id column="teamId" property="teamId" />
<result column="creatorId" property="creatorId" />
<result column="creatorName" property="creatorName" />
<result column="certificate" property="certificate" />
<result column="memberNums" property="memberNums" />
<result column="score" property="score" />
<collection property="members" ofType="com.ccsens.mt.bean.vo.CompeteVo$CompeteTeamProjectMember">
<id column="memberId" property="memberId"/>
<result column="memberName" property="memberName"/>
<result column="captain" property="captain"/>
</collection>
<collection property="videoInfoList" ofType="com.ccsens.mt.bean.vo.VideoVo$GetVideoInfo">
<id column="videoId" property="videoId"/>
<result column="fileId" property="fileId"/>
<result column="videoUrl" property="videoUrl"/>
<result column="uploadTime" property="uploadTime"/>
</collection>
</resultMap>
<resultMap id="getPlayerByProjectId" type="com.ccsens.mt.bean.vo.CompeteVo$PlayerInfoByProject">
<id column="playerId" property="playerId" />
<result column="name" property="name" />
<result column="gender" property="gender" />
<result column="phone" property="phone" />
<result column="groupId" property="groupId" />
<result column="groupName" property="groupName" />
<result column="companyName" property="companyName" />
<result column="certificate" property="certificate" />
<result column="score" property="score" />
<collection property="videoInfoList" ofType="com.ccsens.mt.bean.vo.VideoVo$GetVideoInfo">
<id column="videoId" property="videoId"/>
<result column="fileId" property="fileId"/>
<result column="videoUrl" property="videoUrl"/>
<result column="uploadTime" property="uploadTime"/>
</collection>
</resultMap>
<select id="countJoinTeam" resultType="java.lang.Long">
SELECT
@ -161,10 +184,28 @@
(SELECT count(id) FROM t_compete_team_member WHERE compete_team_id = t.id) as memberNums,
m.id as memberId,
p.`name` as memberName,
if(t.creator = p.id , true,false) as captain
if(t.creator = p.id , true,false) as captain,
t.score,
v.id as videoId,
v.file_id as fileId,
v.video_url as videoUrl,
v.time as uploadTime
FROM
t_compete_team t left join t_compete_team_member m on t.id = m.compete_team_id
LEFT JOIN t_compete_player p on m.player_id = p.id
LEFT JOIN t_compete_video v on v.player_id = t.id and v.rec_status = 0
LEFT JOIN
(
SELECT
s.task_id as teamId,
sum(s.score) as score
FROM
t_mt_score_log l LEFT JOIN t_mt_score s on l.id = s.score_log_id
WHERE
l.project_id = #{competeProjectId}
and l.rec_status = 0
and s.rec_status = 0
) t on t.teamId = t.id
WHERE
t.project_id = #{competeProjectId}
and t.compete_time_id = #{competeTimeId}
@ -172,7 +213,7 @@
and m.rec_status = 0
and p.rec_status = 0
</select>
<select id="getPlayerByProjectId" resultType="com.ccsens.mt.bean.vo.CompeteVo$PlayerInfoByProject">
<select id="getPlayerByProjectId" resultMap="getPlayerByProjectId">
SELECT
p.id as playerId,
p.`name`,
@ -181,12 +222,30 @@
p.compete_group_id as groupId,
(SELECT `group_name` FROM t_compete_group WHERE id = p.compete_group_id) as groupName,
(SELECT `name` FROM t_compete_company WHERE id = p.company_id) as companyName,
pp.certificate
pp.certificate,
t.score,
v.id as videoId,
v.file_id as fileId,
v.video_url as videoUrl,
v.time as uploadTime
FROM
t_compete_project_player pp left join t_compete_player p on pp.player_id = p.id
LEFT JOIN t_compete_video v on v.player_id = pp.id and v.rec_status = 0
LEFT JOIN
(
SELECT
s.task_id as playerId,
sum(s.score) as score
FROM
t_mt_score_log l LEFT JOIN t_mt_score s on l.id = s.score_log_id
WHERE
l.project_id = #{competeProjectId}
and l.rec_status = 0
and s.rec_status = 0
) t on t.playerId = pp.id
WHERE
pp.project_id = 9
and pp.compete_time_id = 1
pp.project_id = #{competeProjectId}
and pp.compete_time_id = #{competeTimeId}
and pp.rec_status = 0
and p.rec_status = 0
</select>

19
tall/src/main/java/com/ccsens/tall/bean/dto/PluginDto.java

@ -3,6 +3,7 @@ package com.ccsens.tall.bean.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.NonNull;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
@ -75,4 +76,22 @@ public class PluginDto {
private byte type;
}
@Data
@ApiModel("修改插件配置")
public static class UpdatePluginConfig {
@NonNull
@ApiModelProperty("任务id")
private Long taskId;
@ApiModelProperty("任务插件id")
private Long taskPluginId;
@ApiModelProperty("页面接口路径")
private String webPath;
@ApiModelProperty("入参")
private String importParam;
@ApiModelProperty("放置位置 默认0 ,0任务名 1详情页 2任务下")
private Byte placeLocation;
@ApiModelProperty("程序位置 0:tall内部,1外部")
private Byte routineLocation;
}
}

11
tall/src/main/java/com/ccsens/tall/bean/dto/TaskDto.java

@ -174,6 +174,8 @@ public class TaskDto {
private Long delayTime;
@ApiModelProperty("优先级 3,紧急重要 2,紧急不重要 1,重要不紧急 0,不重要不紧急 默认0")
private Byte priority;
@ApiModelProperty("是否是里程碑 0否 1是")
private Byte milestone;
@ApiModelProperty("交付物id和修改后的名字")
private List<UpdateTaskDeliverName> deliverList;
@ApiModelProperty("需要修改的插件Id")
@ -376,4 +378,13 @@ public class TaskDto {
private Integer pageSize = 10;
}
@Data
@ApiModel
public static class QueryAllTaskByProjectId {
@ApiModelProperty("项目Id")
private Long projectId;
@ApiModelProperty("角色id")
private Long roleId;
}
}

3
tall/src/main/java/com/ccsens/tall/bean/dto/UserDto.java

@ -175,6 +175,9 @@ public class UserDto {
@ApiModelProperty("账号")
@NotEmpty(message = "新账号不能为空.")
private String account;
@ApiModelProperty("密码,有账号登录信息则验证密码,没有则设为新密码")
@NotEmpty(message = "密码不能为空")
private String password;
}
@Data

11
tall/src/main/java/com/ccsens/tall/bean/po/ProRole.java

@ -22,6 +22,8 @@ public class ProRole implements Serializable {
private Byte recStatus;
private Long relevanceProjectId;
private static final long serialVersionUID = 1L;
public Long getId() {
@ -96,6 +98,14 @@ public class ProRole implements Serializable {
this.recStatus = recStatus;
}
public Long getRelevanceProjectId() {
return relevanceProjectId;
}
public void setRelevanceProjectId(Long relevanceProjectId) {
this.relevanceProjectId = relevanceProjectId;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@ -111,6 +121,7 @@ public class ProRole implements Serializable {
sb.append(", createdAt=").append(createdAt);
sb.append(", updatedAt=").append(updatedAt);
sb.append(", recStatus=").append(recStatus);
sb.append(", relevanceProjectId=").append(relevanceProjectId);
sb.append("]");
return sb.toString();
}

60
tall/src/main/java/com/ccsens/tall/bean/po/ProRoleExample.java

@ -664,6 +664,66 @@ public class ProRoleExample {
addCriterion("rec_status not between", value1, value2, "recStatus");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdIsNull() {
addCriterion("relevance_project_id is null");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdIsNotNull() {
addCriterion("relevance_project_id is not null");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdEqualTo(Long value) {
addCriterion("relevance_project_id =", value, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdNotEqualTo(Long value) {
addCriterion("relevance_project_id <>", value, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdGreaterThan(Long value) {
addCriterion("relevance_project_id >", value, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdGreaterThanOrEqualTo(Long value) {
addCriterion("relevance_project_id >=", value, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdLessThan(Long value) {
addCriterion("relevance_project_id <", value, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdLessThanOrEqualTo(Long value) {
addCriterion("relevance_project_id <=", value, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdIn(List<Long> values) {
addCriterion("relevance_project_id in", values, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdNotIn(List<Long> values) {
addCriterion("relevance_project_id not in", values, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdBetween(Long value1, Long value2) {
addCriterion("relevance_project_id between", value1, value2, "relevanceProjectId");
return (Criteria) this;
}
public Criteria andRelevanceProjectIdNotBetween(Long value1, Long value2) {
addCriterion("relevance_project_id not between", value1, value2, "relevanceProjectId");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {

11
tall/src/main/java/com/ccsens/tall/bean/po/ProTaskDetail.java

@ -58,6 +58,8 @@ public class ProTaskDetail implements Serializable {
private Byte priority;
private Byte milestone;
private static final long serialVersionUID = 1L;
public Long getId() {
@ -276,6 +278,14 @@ public class ProTaskDetail implements Serializable {
this.priority = priority;
}
public Byte getMilestone() {
return milestone;
}
public void setMilestone(Byte milestone) {
this.milestone = milestone;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
@ -309,6 +319,7 @@ public class ProTaskDetail implements Serializable {
sb.append(", updatedAt=").append(updatedAt);
sb.append(", recStatus=").append(recStatus);
sb.append(", priority=").append(priority);
sb.append(", milestone=").append(milestone);
sb.append("]");
return sb.toString();
}

60
tall/src/main/java/com/ccsens/tall/bean/po/ProTaskDetailExample.java

@ -1774,6 +1774,66 @@ public class ProTaskDetailExample {
addCriterion("priority not between", value1, value2, "priority");
return (Criteria) this;
}
public Criteria andMilestoneIsNull() {
addCriterion("milestone is null");
return (Criteria) this;
}
public Criteria andMilestoneIsNotNull() {
addCriterion("milestone is not null");
return (Criteria) this;
}
public Criteria andMilestoneEqualTo(Byte value) {
addCriterion("milestone =", value, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneNotEqualTo(Byte value) {
addCriterion("milestone <>", value, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneGreaterThan(Byte value) {
addCriterion("milestone >", value, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneGreaterThanOrEqualTo(Byte value) {
addCriterion("milestone >=", value, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneLessThan(Byte value) {
addCriterion("milestone <", value, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneLessThanOrEqualTo(Byte value) {
addCriterion("milestone <=", value, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneIn(List<Byte> values) {
addCriterion("milestone in", values, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneNotIn(List<Byte> values) {
addCriterion("milestone not in", values, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneBetween(Byte value1, Byte value2) {
addCriterion("milestone between", value1, value2, "milestone");
return (Criteria) this;
}
public Criteria andMilestoneNotBetween(Byte value1, Byte value2) {
addCriterion("milestone not between", value1, value2, "milestone");
return (Criteria) this;
}
}
public static class Criteria extends GeneratedCriteria {

2
tall/src/main/java/com/ccsens/tall/bean/vo/ProjectVo.java

@ -166,6 +166,8 @@ public class ProjectVo {
private boolean stakeholder;
@ApiModelProperty("该角色是否显示")
private Boolean isShow = true;
@ApiModelProperty("是否是项目虚拟的角色 0否 1是")
private byte projectRole = 0;
@ApiModelProperty("成员信息")
private List<ProMemberVo> members;
@JsonIgnore

46
tall/src/main/java/com/ccsens/tall/bean/vo/TaskVo.java

@ -148,6 +148,8 @@ public class TaskVo {
private String importParam;
@ApiModelProperty("优先级 默认0 3,紧急重要 2,紧急不重要 1,重要不紧急 0,不重要不紧急")
private Byte priority;
@ApiModelProperty("是否是里程碑 0否 1是")
private Byte milestone;
@ApiModelProperty("提醒的信息")
private List<RemindInfo> remindInfoList;
public Long getDuration(){
@ -221,6 +223,12 @@ public class TaskVo {
private String description;
@ApiModelProperty("显示分类")
private String showType;
@ApiModelProperty("页面/接口路径")
private String webPath;
@ApiModelProperty("程序位置 0:tall内部,1外部")
private Byte routineLocation;
@ApiModelProperty("入参")
private String importParam;
@JsonIgnore
private Long roleId;
}
@ -434,4 +442,42 @@ public class TaskVo {
private String deliverPath;
}
}
@Data
@ApiModel("根据项目id查询所有任务信息")
public static class TaskListByProjectId{
@ApiModelProperty("任务详细信息id")
private Long detailId;
@ApiModelProperty("名称")
private String name;
@ApiModelProperty("详细描述")
private String description;
@ApiModelProperty("所属项目id")
private Long projectId;
@ApiModelProperty("所属项目名称")
private String projectName;
@ApiModelProperty("负责人Id")
private Long executorRole;
@ApiModelProperty("负责人名称")
private String executorRoleName;
@ApiModelProperty("交付物id")
private Long deliverId;
@ApiModelProperty("交付物名称")
private String deliverName;
@ApiModelProperty("开始时间")
private Long beginTime;
@ApiModelProperty("结束时间")
private Long endTime;
@ApiModelProperty("循环周期")
private String cycle;
@ApiModelProperty("奖惩")
private BigDecimal money;
@ApiModelProperty("优先级 默认0 3,紧急重要 2,紧急不重要 1,重要不紧急 0,不重要不紧急")
private Byte priority;
@ApiModelProperty("是否是里程碑 0否 1是")
private Byte milestone;
@ApiModelProperty("二级任务")
private List<TaskListByProjectId> secondTasks;
}
}

3
tall/src/main/java/com/ccsens/tall/persist/dao/SysPluginDao.java

@ -1,5 +1,6 @@
package com.ccsens.tall.persist.dao;
import com.ccsens.tall.bean.po.ProPluginConfig;
import com.ccsens.tall.bean.vo.PluginVo;
import com.ccsens.tall.bean.vo.TaskVo;
import com.ccsens.tall.bean.vo.WbsVo;
@ -20,4 +21,6 @@ public interface SysPluginDao extends SysPluginMapper{
void deleteByTaskId(@Param("taskId")Long taskId);
List<WbsVo.PluginInfo> getPluginNameAndTaskName(@Param("projectId")Long projectId);
ProPluginConfig getPluginConfigByTaskPluginId(@Param("taskPluginId")String taskPluginId);
}

13
tall/src/main/java/com/ccsens/tall/persist/dao/TaskDetailDao.java

@ -40,4 +40,17 @@ public interface TaskDetailDao extends ProTaskDetailMapper {
List<ProTaskDetail> selectAllByProject(@Param("projectId")Long projectId);
List<WbsVo.ChecklistByProjectId> getChecklistsByProjectId(@Param("projectId")Long projectId,@Param("roleId")Long roleId,@Param("allMemberId")Long allMemberId,@Param("startTime")Long startTime,@Param("endTime")Long endTime);
/**
* 通过任务id查看任务信息查看项目下所有任务时
* @param detailTaskId
* @return
*/
TaskVo.TaskListByProjectId getTaskById(@Param("detailTaskId")Long detailTaskId);
/**
* 通过任务id查看任务信息查看项目下所有任务时
* @param parentTaskId
* @return
*/
List<TaskVo.TaskListByProjectId> getTaskByParentId(@Param("parentTaskId")Long parentTaskId);
}

3
tall/src/main/java/com/ccsens/tall/persist/mapper/ProRoleMapper.java

@ -2,9 +2,8 @@ package com.ccsens.tall.persist.mapper;
import com.ccsens.tall.bean.po.ProRole;
import com.ccsens.tall.bean.po.ProRoleExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import org.apache.ibatis.annotations.Param;
public interface ProRoleMapper {
long countByExample(ProRoleExample example);

33
tall/src/main/java/com/ccsens/tall/service/ExcelService.java

@ -17,9 +17,14 @@ import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import javax.annotation.Resource;
import java.io.FileInputStream;
@ -145,7 +150,6 @@ public class ExcelService implements IExcelService {
readProject(wbsSheet, projectInfoStart, projectInfoEnd, currentUserId, sysProject);
readMember(wbsSheet, memberSheet, memberStart, memberEnd, sysProject, proRoles, proMembers);
readTask(xssfWorkbook, wbsSheet, taskStart, taskEnd, currentUserId, sysProject, taskDetails, proRoles, proMembers, hasGroupMap);
saveProTaskSubTime(taskDetails);
//读取插件表
readPlugin(xssfWorkbook, taskDetails, proRoles, hasGroupMap);
//读取插件配置表
@ -156,6 +160,8 @@ public class ExcelService implements IExcelService {
wbsSubSheetService.getRoBotSheet(sysProject.getId(),xssfWorkbook);
//读取关联项目表
wbsSubSheetService.readRelevanceProject(sysProject.getId(),xssfWorkbook);
saveProTaskSubTime(taskDetails);
return sysProject;
}
@ -283,6 +289,7 @@ public class ExcelService implements IExcelService {
String proRoleCell = ExcelUtil.getCellValue(row.getCell(1));
String secondRoleCell = ExcelUtil.getCellValue(row.getCell(2));
String memberCell = ExcelUtil.getCellValue(row.getCell(3));
String roleRelevanceProjectId = ExcelUtil.getCellValue(row.getCell(3));
//添加一级角色
if (StrUtil.isNotEmpty(proRoleCell)) {
ProRole role = new ProRole();
@ -311,6 +318,9 @@ public class ExcelService implements IExcelService {
} else if (proRoleCell.equalsIgnoreCase(WebConstant.ROLE_NAME.Attention.phase)) {
role.setName(WebConstant.ROLE_NAME.Attention.value);
role.setDescription(WebConstant.ROLE_NAME.Attention.phase);
}else if (proRoleCell.equalsIgnoreCase(WebConstant.ROLE_NAME.ProjectVirtualRole.phase)) {
role.setName(WebConstant.ROLE_NAME.ProjectVirtualRole.value);
role.setDescription(WebConstant.ROLE_NAME.ProjectVirtualRole.phase);
} else {
throw new BaseException(CodeEnum.WBS_NOT_FIRST_ROLE.addMsg(wbsSheet.getSheetName() + i));
}
@ -339,6 +349,19 @@ public class ExcelService implements IExcelService {
proRole.setParentId(firstRoleId);
proRole.setProjectId(sysProject.getId());
proRole.setId(snowflake.nextId());
//为虚拟项目角色添加关联的项目id
if (StrUtil.isEmpty(memberCell) && StrUtil.isNotEmpty(roleRelevanceProjectId)){
//查找关联的项目
try {
SysProject project = sysProjectDao.selectByPrimaryKey(Long.parseLong(roleRelevanceProjectId));
if(ObjectUtil.isNull(project)){
throw new BaseException(CodeEnum.NOT_PROJECT.addMsg(wbsSheet.getSheetName() + i));
}
proRole.setRelevanceProjectId(project.getId());
}catch (NumberFormatException e){
throw new BaseException(CodeEnum.NOT_PROJECT.addMsg(wbsSheet.getSheetName() + i));
}
}
proRoleService.saveProRole(proRole);
proRoles.add(proRole);
secondRoleId = proRole.getId();
@ -349,7 +372,7 @@ public class ExcelService implements IExcelService {
if (ObjectUtil.isNull(secondRoleId)) {
throw new BaseException("找不到二级角色[" + i + "]");
}
//添加角色成员关联信息
if (StrUtil.isNotEmpty(memberCell)) {
ProMemberRole memberRole = null;
for (ProMember member : proMembers) {
@ -364,7 +387,11 @@ public class ExcelService implements IExcelService {
if (ObjectUtil.isNull(memberRole)) {
throw new BaseException(CodeEnum.WSB_NOT_MEMBER.addMsg(wbsSheet.getSheetName() + i));
}
}else if (StrUtil.isNotEmpty(roleRelevanceProjectId)) {
}
}
//角色对谁不可见
String[] excludeRoleCells;
@ -994,11 +1021,13 @@ public class ExcelService implements IExcelService {
return;
}
for (CronConstant.TaskDate taskDate : taskDateList) {
ProTaskSubTime proTaskSubTime = new ProTaskSubTime();
proTaskSubTime.setId(snowflake.nextId());
proTaskSubTime.setTaskDetailId(taskDetail.getId());
proTaskSubTime.setBeginTime(taskDate.getStartDate().getTime());
proTaskSubTime.setEndTime(taskDate.getEndDate().getTime());
taskSubTimeService.saveProTaskSubTask(proTaskSubTime);
}
}

9
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.ProjectDto;
import com.ccsens.tall.bean.dto.TaskDto;
import com.ccsens.tall.bean.po.ProSubTimeMember;
import com.ccsens.tall.bean.po.ProTaskDetail;
@ -46,4 +47,12 @@ public interface IProTaskDetailService {
* @throws Exception 异常
*/
TaskVo.NormalTask updateTaskConfig(Long userId,TaskDto.UpdateTaskConfig updateTaskConfig) throws Exception;
/**
* 通过项目id查找所有任务
* @param currentUserId userId
* @param projectId 项目Id
* @return 返回所有任务
*/
List<TaskVo.TaskListByProjectId> queryAllTaskByProjectId(Long currentUserId, TaskDto.QueryAllTaskByProjectId projectId) throws Exception;
}

6
tall/src/main/java/com/ccsens/tall/service/ITaskPluginService.java

@ -61,4 +61,10 @@ public interface ITaskPluginService {
* @return 返回wps里的文件的路径
*/
List<PluginVo.MinutesInfo> updateMinutesProject(Long currentUserId, PluginDto.UpdateMinutes updateMinutes, String token) throws Exception;
/**
* 修改插件配置
* @param updatePluginConfig 插件配置
*/
void updatePluginConfig(PluginDto.UpdatePluginConfig updatePluginConfig);
}

3
tall/src/main/java/com/ccsens/tall/service/ProMemberService.java

@ -72,6 +72,9 @@ public class ProMemberService implements IProMemberService {
boolean flag = false;
//如果该角色是全体成员返回true
ProRole role = proRoleDao.selectByPrimaryKey(roleId);
if(ObjectUtil.isNull(role)){
return false;
}
if(role.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.AllMember.phase)){
flag = true;
}

125
tall/src/main/java/com/ccsens/tall/service/ProTaskDetailService.java

@ -6,6 +6,7 @@ import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.ccsens.cloudutil.feign.MtFeignClient;
import com.ccsens.tall.bean.dto.ProjectDto;
import com.ccsens.tall.bean.dto.TaskDto;
import com.ccsens.tall.bean.po.*;
import com.ccsens.tall.bean.vo.MemberVo;
@ -106,7 +107,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
// obj = getTaskInfoByMvp(projectId, page, pageSize);
// } else
if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.PM.value)) {
obj = getTaskInfoByProjectIdAndPM(currentUserId, projectId, taskInfoByRoleId.getRoleId(),
obj = getTaskInfoByProjectIdAndPm(currentUserId, projectId, taskInfoByRoleId.getRoleId(),
taskInfoByRoleId.getStartTime(), taskInfoByRoleId.getEndTime(), taskInfoByRoleId.getProcess(),
taskInfoByRoleId.getPage(), taskInfoByRoleId.getPageSize(),taskInfoByRoleId.getPriority(),taskInfoByRoleId.getImitation());
} else if (parentRole.getName().equalsIgnoreCase(WebConstant.ROLE_NAME.Member.value)) {
@ -142,8 +143,8 @@ public class ProTaskDetailService implements IProTaskDetailService {
/**
* 查看任务 项目经理
*/
private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndPM(Long currentUserId, Long projectId,Long roleId, Long startTime, Long endTime,
Integer process, Integer page, Integer pageSize,Integer priority,Integer imitation) throws Exception {
private TaskVo.ProTaskInfo getTaskInfoByProjectIdAndPm(Long currentUserId, Long projectId, Long roleId, Long startTime, Long endTime,
Integer process, Integer page, Integer pageSize, Integer priority, Integer imitation) throws Exception {
TaskVo.ProTaskInfo proTaskInfo = new TaskVo.ProTaskInfo();
List<TaskVo.GlobalTask> globalTaskList = new ArrayList<>();
@ -460,13 +461,19 @@ public class ProTaskDetailService implements IProTaskDetailService {
plugin.setName(pluginNames[i]);
plugin.setDescription(pluginDescription[i]);
plugin.setShowType(pluginShowType[i]);
//查找插件的配置信息
ProPluginConfig proPluginConfig = sysPluginDao.getPluginConfigByTaskPluginId(pluginIds[i]);
if(ObjectUtil.isNotNull(proPluginConfig)) {
plugin.setWebPath(proPluginConfig.getWebPath());
plugin.setRoutineLocation(proPluginConfig.getRoutineLocation());
plugin.setImportParam(proPluginConfig.getImportParam());
}
pluginVoList.add(plugin);
}
}
normalTask.setPlugins(pluginVoList);
}
}
}
/**
@ -566,7 +573,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
taskDetail.setProTaskConfig(getProTaskShow(taskDetail.getDetailId()));
//添加项目信息
normalTaskAddPlugin(currentUserId, subTime.getTaskDetailId(), taskDetail);
normalTaskAddPlugin(subTime.getTaskDetailId(), taskDetail);
List<TaskVo.NormalTask> groupTaskList = new ArrayList<>();
//提醒信息
@ -597,7 +604,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
//添加项目信息和插件信息
normalTaskAddPlugin(currentUserId, groupTask.getDetailId(), groupTask);
normalTaskAddPlugin(groupTask.getDetailId(), groupTask);
//修改返回时子任务的名字(“任务名+(xx和XX)”)
if (detail.getAllMember() == 0) {
groupTask.setName(updateSubTaskName(groupTask.getDetailId(), groupTask.getName()));
@ -615,7 +622,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
return taskDetail;
}
private void normalTaskAddPlugin(Long userId, Long taskId, TaskVo.NormalTask normalTask) throws Exception {
private void normalTaskAddPlugin( Long taskId, TaskVo.NormalTask normalTask) {
ProTaskDetail task = taskDetailDao.selectByPrimaryKey(taskId);
//添加项目信息
SysProject project = sysProjectDao.selectByPrimaryKey(task.getProjectId());
@ -627,17 +634,13 @@ public class ProTaskDetailService implements IProTaskDetailService {
if (ObjectUtil.isNotNull(role)) {
normalTask.setExecutorRoleName(role.getName());
}
//添加插件
// List<TaskVo.PluginVo> pluginVoList = pluginService.getPluginByTask(task.getId(), userId);
// normalTask.setPlugins(new ArrayList<>());
// normalTask.getPlugins().addAll(pluginVoList);
}
/**
* 修改返回时子任务的名字 格式任务名+xx和XX
*/
private String updateSubTaskName(Long taskId, String taskName) {
String name = taskName + "(";
StringBuilder name = new StringBuilder(taskName + "(");
ProTaskMemberExample taskMemberExample = new ProTaskMemberExample();
taskMemberExample.createCriteria().andTaskDetailIdEqualTo(taskId);
List<ProTaskMember> taskMemberList = taskMemberDao.selectByExample(taskMemberExample);
@ -645,15 +648,15 @@ public class ProTaskDetailService implements IProTaskDetailService {
for (int i = 0; i < taskMemberList.size(); i++) {
ProMember member = proMemberDao.selectByPrimaryKey(taskMemberList.get(i).getMemberId());
if (ObjectUtil.isNotNull(member)) {
name += member.getNickname();
name.append(member.getNickname());
if (i != taskMemberList.size() - 1) {
name += "和";
name.append("和");
}
}
}
}
name = name + ")";
return name;
name.append(")");
return name.toString();
}
@ -719,13 +722,7 @@ public class ProTaskDetailService implements IProTaskDetailService {
//关键词模糊搜索
if (StrUtil.isNotEmpty(key)) {
if (CollectionUtil.isNotEmpty(normalTaskList)) {
Iterator<TaskVo.NormalTask> it = normalTaskList.iterator();
while (it.hasNext()) {
TaskVo.NormalTask normalTask = it.next();
if (!normalTask.getName().contains(key)) {
it.remove();
}
}
normalTaskList.removeIf(normalTask -> !normalTask.getName().contains(key));
}
}
@ -1151,6 +1148,9 @@ public class ProTaskDetailService implements IProTaskDetailService {
(taskDetail.getDelay() == WebConstant.TASK_DELAY.DelayManual.value)){
taskDetail.setDelayTime(updateTaskInfo.getDelayTime());
}
if(ObjectUtil.isNotNull(updateTaskInfo.getMilestone())){
taskDetail.setMilestone(updateTaskInfo.getMilestone());
}
//时间
if(ObjectUtil.isNotNull(updateTaskInfo.getBeginTime()) ||
ObjectUtil.isNotNull(updateTaskInfo.getEndTime()) ||
@ -1422,4 +1422,83 @@ public class ProTaskDetailService implements IProTaskDetailService {
}
return getTaskInfoByTaskId(userId,taskDetail.getProjectId(),updateTaskConfig.getTaskId(),null);
}
@Override
public List<TaskVo.TaskListByProjectId> queryAllTaskByProjectId(Long currentUserId, TaskDto.QueryAllTaskByProjectId projectIdDto) throws Exception {
List<TaskVo.TaskListByProjectId> taskList = new ArrayList<>();
// TaskVo.TaskListByProjectId firstTask;
//1、查找一级任务
SysProject project = sysProjectDao.selectByPrimaryKey(projectIdDto.getProjectId());
if (ObjectUtil.isNull(project)) {
throw new BaseException(CodeEnum.NOT_PROJECT);
}
ProTaskDetailExample proTaskDetailExample = new ProTaskDetailExample();
proTaskDetailExample.createCriteria().andProjectIdEqualTo(projectIdDto.getProjectId()).andLevelEqualTo((byte) 1);
List<ProTaskDetail> firstTaskDetailList = taskDetailDao.selectByExample(proTaskDetailExample);
if (CollectionUtil.isNotEmpty(firstTaskDetailList)) {
firstTaskDetailList.forEach(firstTaskDetail -> {
TaskVo.TaskListByProjectId firstTask = taskDetailDao.getTaskById(firstTaskDetail.getId());
List<TaskVo.TaskListByProjectId> secondTaskList = taskDetailDao.getTaskByParentId(firstTaskDetail.getId());
firstTask.setSecondTasks(secondTaskList);
taskList.add(firstTask);
});
}
// int sequence = 1;
// for (ProTaskDetail firstTaskDetail : firstTaskDetailList) {
// TaskVo.TaskListByProjectId firstTask = new TaskVo.TaskListByProjectId();
// BeanUtil.copyProperties(firstTaskDetail, firstTask);
// normalTask.setDetailId(firstTaskDetail.getId());
// normalTask.setId(taskDeliverService.isTaskOrSubTime(firstTaskDetail.getId()));
// normalTask.setSequence(sequence);
// // 查询任务对应的配置
// ProPluginConfigExample configExample = new ProPluginConfigExample();
// configExample.createCriteria().andTaskIdEqualTo(firstTaskDetail.getId()).andPlaceLocationEqualTo((byte)0);
// List<ProPluginConfig> proPluginConfigs = proPluginConfigMapper.selectByExample(configExample);
// if (CollectionUtil.isNotEmpty(proPluginConfigs)) {
// ProPluginConfig config = proPluginConfigs.get(0);
// normalTask.setImportParam(config.getImportParam());
// normalTask.setRoutineLocation(config.getRoutineLocation());
// normalTask.setWebPath(config.getWebPath());
// }
// //一级任务配置
// normalTask.setProTaskConfig(getProTaskShow(normalTask.getDetailId()));
//
// //一级任务完成状态
// ProSubTimeMember firstSubTimeMember = getProcessByUserIdAndTask(currentUserId, normalTask.getId());
// if (ObjectUtil.isNotNull(firstSubTimeMember)) {
// normalTask.setRealEndTime(firstSubTimeMember.getRealFinishTime());
// normalTask.setProcess(firstSubTimeMember.getComplatedStatus());
// }
// //查找一级任务下的二级任务
// List<TaskVo.NormalTask> secondNormalTaskList = taskDetailDao.selectNormalTaskListByPM(projectIdDto.getProjectId(), firstTaskDetail.getId(), project.getBeginTime(), project.getEndTime(),projectIdDto.getRoleId());
// if (CollectionUtil.isNotEmpty(secondNormalTaskList)) {
// for (TaskVo.NormalTask task : secondNormalTaskList) {
// //处理插件
// managePlugin(currentUserId,projectIdDto.getRoleId(),task,null);
// //二级任务完成状态
// if(task.getProcess() != 2) {
// ProSubTimeMember subTimeMember = getProcessByUserIdAndTask(currentUserId, task.getId());
// if (ObjectUtil.isNotNull(subTimeMember)) {
// task.setRealEndTime(subTimeMember.getRealFinishTime());
// task.setProcess(subTimeMember.getComplatedStatus());
// }else if(task.getProcess() > 2){
// task.setRealEndTime((long) 0);
// task.setProcess(0);
// }
// }
// //二级任务配置
// task.setProTaskConfig(getProTaskShow(task.getDetailId()));
// //提醒信息
// task.setRemindInfoList(proRemindDao.queryRemindByTask(normalTask.getId()));
// }
// }
// normalTask.setSecondTasks(secondNormalTaskList);
// normalTaskList.add(normalTask);
// sequence++;
// }
// }
// return normalTaskList;
return taskList;
}
}

67
tall/src/main/java/com/ccsens/tall/service/TaskPluginService.java

@ -19,6 +19,7 @@ import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.eclipse.jetty.util.log.Log;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
@ -38,6 +39,8 @@ public class TaskPluginService implements ITaskPluginService{
@Resource
private TaskPluginDao taskPluginDao;
@Resource
private ProPluginConfigDao proPluginConfigDao;
@Resource
private TaskDetailDao taskDetailDao;
@Resource
private TaskSubTimeDao taskSubTimeDao;
@ -728,4 +731,68 @@ public class TaskPluginService implements ITaskPluginService{
});
}
}
/**
* 修改插件配置
* @param updatePluginConfig 插件配置
*/
@Override
public void updatePluginConfig(PluginDto.UpdatePluginConfig updatePluginConfig) {
//获取任务详情id
Long taskDetailId = updatePluginConfig.getTaskId();
ProTaskSubTime taskSubTime = taskSubTimeDao.selectByPrimaryKey(updatePluginConfig.getTaskId());
if(ObjectUtil.isNotNull(taskSubTime)){
taskDetailId = taskSubTime.getTaskDetailId();
}
//获取插件id
Long sysPluginId = 0L;
ProTaskPlugin taskPlugin = taskPluginDao.selectByPrimaryKey(updatePluginConfig.getTaskPluginId());
if(ObjectUtil.isNotNull(taskPlugin)){
sysPluginId = taskPlugin.getPluginId();
}
//查找原来的插件配置
ProPluginConfigExample proPluginConfigExample = new ProPluginConfigExample();
proPluginConfigExample.createCriteria().andTaskIdEqualTo(taskDetailId).andPluginIdEqualTo(sysPluginId);
List<ProPluginConfig> proPluginConfigList = proPluginConfigDao.selectByExample(proPluginConfigExample);
if(CollectionUtil.isNotEmpty(proPluginConfigList)){
ProPluginConfig pluginConfig = proPluginConfigList.get(0);
//有则修改
if(ObjectUtil.isNotNull(pluginConfig)){
if(StrUtil.isNotEmpty(updatePluginConfig.getWebPath())) {
pluginConfig.setWebPath(updatePluginConfig.getWebPath());
}
if(StrUtil.isNotEmpty(updatePluginConfig.getImportParam())) {
pluginConfig.setImportParam(updatePluginConfig.getImportParam());
}
if(ObjectUtil.isNotNull(updatePluginConfig.getPlaceLocation())) {
pluginConfig.setPlaceLocation(updatePluginConfig.getPlaceLocation());
}
if(ObjectUtil.isNotNull(updatePluginConfig.getRoutineLocation())) {
pluginConfig.setRoutineLocation(updatePluginConfig.getRoutineLocation());
}
proPluginConfigDao.updateByPrimaryKeySelective(pluginConfig);
}
} else {
//没有则添加
ProPluginConfig proPluginConfig = new ProPluginConfig();
proPluginConfig.setId(snowflake.nextId());
proPluginConfig.setTaskId(taskDetailId);
proPluginConfig.setPluginId(sysPluginId);
if(StrUtil.isNotEmpty(updatePluginConfig.getWebPath())) {
proPluginConfig.setWebPath(updatePluginConfig.getWebPath());
}
if(StrUtil.isNotEmpty(updatePluginConfig.getImportParam())) {
proPluginConfig.setImportParam(updatePluginConfig.getImportParam());
}
if(ObjectUtil.isNotNull(updatePluginConfig.getPlaceLocation())) {
proPluginConfig.setPlaceLocation(updatePluginConfig.getPlaceLocation());
}
if(ObjectUtil.isNotNull(updatePluginConfig.getRoutineLocation())) {
proPluginConfig.setRoutineLocation(updatePluginConfig.getRoutineLocation());
}
proPluginConfigDao.insertSelective(proPluginConfig);
}
}
}

20
tall/src/main/java/com/ccsens/tall/service/TaskSubTimeService.java

@ -28,8 +28,12 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.support.DefaultTransactionDefinition;
import javax.annotation.Resource;
import java.util.*;
@ -75,10 +79,26 @@ public class TaskSubTimeService implements ITaskSubTimeService {
private ProRemindDao proRemindDao;
@Autowired
private AmqpTemplate rabbitTemplate;
//定义事务对象
@Resource
private PlatformTransactionManager transactionManager;
@Override
public void saveProTaskSubTask(ProTaskSubTime proTaskSubTime) {
//开启手动事务
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
// 事务隔离级别,开启新事务
def.setPropagationBehavior( TransactionDefinition.PROPAGATION_REQUIRES_NEW );
//获取事务状态,并开启事务,相当于transation.begin();
TransactionStatus status = transactionManager.getTransaction( def );
try{
// method();//执行方法
taskSubTimeDao.insertSelective(proTaskSubTime);
transactionManager.commit( status ); //提交事务
} catch(Exception e){
transactionManager.rollback(status);
}
}
/**

22
tall/src/main/java/com/ccsens/tall/service/UserInfoService.java

@ -27,6 +27,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.servlet.http.Part;
import java.io.File;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;
import java.util.Date;
import java.util.List;
@ -76,9 +78,29 @@ public class UserInfoService implements IUserInfoService{
List<SysAuth> authList = sysAuthDao.selectByExample(authAccountExample);
if(CollectionUtil.isNotEmpty(authList)){
authList.forEach(sysAuth -> {
//验证密码
try {
if (!ShiroKit.authenticate(changeAccount.getPassword(), sysAuth.getCredential(), sysAuth.getSalt())) {
throw new BaseException(CodeEnum.PASSWORD_ERROR);
}
sysAuth.setIdentifier(changeAccount.getAccount());
sysAuthDao.updateByPrimaryKeySelective(sysAuth);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (InvalidKeySpecException e) {
e.printStackTrace();
}
});
}else {
//不存在则添加账号
SysAuth sysAuth = new SysAuth();
sysAuth.setId(snowflake.nextId());
sysAuth.setUserId(userId);
sysAuth.setIdentifyType((byte) WebConstant.IDENTIFY_TYPE.Account.value);
sysAuth.setIdentifier(changeAccount.getAccount());
sysAuth.setSalt(ShiroKit.getRandomSalt(6));
sysAuth.setCredential(ShiroKit.md5(changeAccount.getPassword(), sysAuth.getSalt()));
sysAuthDao.insertSelective(sysAuth);
}
//修改完删除redis
redisUtil.del(accountKey);

10
tall/src/main/java/com/ccsens/tall/web/PluginController.java

@ -181,4 +181,14 @@ public class PluginController {
List<PluginVo.MinutesInfo> wpsPath = taskPluginService.updateMinutesProject(currentUserId,updateMinutes,token);
return JsonResponse.newInstance().ok(wpsPath);
}
@ApiOperation(value = "修改插件配置信息", notes = "")
@ApiImplicitParams({
})
@RequestMapping(value = "/config", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse updatePluginConfig(@ApiParam @Validated @RequestBody PluginDto.UpdatePluginConfig updatePluginConfig) throws Exception {
taskPluginService.updatePluginConfig(updatePluginConfig);
return JsonResponse.newInstance().ok();
}
}

2
tall/src/main/java/com/ccsens/tall/web/ProjectController.java

@ -146,7 +146,7 @@ public class ProjectController {
@ApiImplicitParam(name = "page", value = "页数", required = true, paramType = "query"),
@ApiImplicitParam(name = "priority", value = "优先级排序 0无 1倒叙(优先级高的在前) 2正序", required = true, paramType = "query")
})
@RequestMapping(value = "/{id}/tasks", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
@RequestMapping(value = "/{id}/tasks", method = {RequestMethod.POST}, produces = {"application/json;charset=UTF-8"})
public JsonResponse<TaskVo.ProTaskInfo> getTasksByRoleId(HttpServletRequest request,
@PathVariable("id") Long projectId,
@RequestBody TaskDto.QueryTaskInfoByRoleId taskInfoByRoleId) throws Exception{

8
tall/src/main/java/com/ccsens/tall/web/TaskController.java

@ -255,6 +255,14 @@ public class TaskController {
return JsonResponse.newInstance().ok(taskInfo);
}
@ApiOperation(value = "查找项目下的所有任务",notes = "")
@RequestMapping(value = "/query", method = RequestMethod.POST, produces = {"application/json;charset=UTF-8"})
public JsonResponse<List<TaskVo.TaskListByProjectId>> queryAllTaskByProjectId(HttpServletRequest request,
@Validated @RequestBody TaskDto.QueryAllTaskByProjectId projectIdDto) throws Exception {
Long currentUserId = Long.valueOf(((Claims) request.getAttribute(WebConstant.REQUEST_KEY_CLAIMS)).getSubject());
List<TaskVo.TaskListByProjectId> taskInfoList = taskDetailService.queryAllTaskByProjectId(currentUserId,projectIdDto);
return JsonResponse.newInstance().ok(taskInfoList);
}
/**
* 通过任务id查询项目id

4
tall/src/main/resources/application.yml

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

6
tall/src/main/resources/mapper_dao/ProRoleDao.xml

@ -13,6 +13,7 @@
<id column="rId" property="id"/>
<result column="rName" property="name"/>
<result column="parentId" property="parentId"/>
<result column="projectRole" property="projectRole"/>
<collection property="members" ofType="com.ccsens.tall.bean.vo.ProjectVo$ProMemberVo">
<id column="mId" property="mId"/>
<result column="mName" property="mName"/>
@ -63,14 +64,15 @@
m.nickname as mName,
m.phone as mPhone,
m.user_id as mUserId,
m.stakeholder_id as stakeholderId
m.stakeholder_id as stakeholderId,
if((SELECT `name` FROM t_pro_role WHERE id = pr.parent_id) = 'ProjectVirtualRole',1,0) as projectRole
from
t_pro_role pr LEFT JOIN t_pro_member_role mr ON mr.role_id = pr.id
LEFT JOIN t_pro_member m ON mr.member_id = m.id
where
pr.project_id = #{projectId}
and
(SELECT name FROM t_pro_role r WHERE pr.parent_id = r.id) in ('PM','Member')
(SELECT name FROM t_pro_role r WHERE pr.parent_id = r.id) in ('PM','Member','ProjectVirtualRole')
AND
pr.name not IN ('全体成员','观众','MVP')
AND

14
tall/src/main/resources/mapper_dao/SysPluginDao.xml

@ -95,4 +95,18 @@
)t
GROUP BY t.taskId,t.roleId
</select>
<select id="getPluginConfigByTaskPluginId" parameterType="java.util.Map" resultType="com.ccsens.tall.bean.po.ProPluginConfig">
SELECT
pc.web_path as webPath,
pc.routine_location as routineLocation,
pc.import_param as importParam
FROM
t_pro_plugin_config pc LEFT JOIN t_pro_task_plugin tp on pc.plugin_id = tp.plugin_id
WHERE
tp.id = #{taskPluginId}
and pc.rec_status = 0
and tp.rec_status = 0
LIMIT 1
</select>
</mapper>

62
tall/src/main/resources/mapper_dao/TaskDetailDao.xml

@ -21,6 +21,7 @@
<result column="tProjectId" property="projectId" />
<result column="tDescription" property="description" />
<result column="tExecutorRole" property="executorRole" />
<result column="tExecutorRoleName" property="executorRoleName" />
<result column="tBeginTime" property="beginTime" />
<result column="tEndTime" property="endTime" />
<result column="tCycle" property="cycle" />
@ -37,6 +38,7 @@
<result column="routineLocation" property="routineLocation" />
<result column="importParam" property="importParam" />
<result column="priority" property="priority" />
<result column="milestone" property="milestone" />
<collection property="plugins" ofType="com.ccsens.tall.bean.vo.TaskVo$PluginVo">
<id column="pId" property="id"/>
<result column="pName" property="name"/>
@ -91,7 +93,8 @@
sp.description as spDescription,
sp.id as spid,
sp.show_type as spShowType,
d.priority as priority
d.priority as priority,
d.milestone as milestone
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d ON s.task_detail_id = d.id
LEFT JOIN t_pro_task_plugin p ON p.task_detail_id = d.id
@ -175,7 +178,8 @@
p.id as p_id,
sp.description as spDescription,
sp.id as spid,
sp.show_type as spShowType
sp.show_type as spShowType,
d.milestone as milestone
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d ON s.task_detail_id = d.id
LEFT JOIN t_pro_task_plugin p ON p.task_detail_id = d.id
@ -246,7 +250,8 @@
p.id as p_id,
sp.description as spDescription,
sp.id as spid,
sp.show_type as spShowType
sp.show_type as spShowType,
d.milestone as milestone
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d ON s.task_detail_id = d.id
LEFT JOIN t_pro_task_plugin p ON p.task_detail_id = d.id
@ -301,7 +306,8 @@
p.id as p_id,
sp.description as spDescription,
sp.id as spid,
sp.show_type as spShowType
sp.show_type as spShowType,
d.milestone as milestone
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d ON s.task_detail_id = d.id
LEFT JOIN t_pro_task_plugin p ON p.task_detail_id = d.id
@ -383,7 +389,8 @@
p.id as p_id,
sp.description as spDescription,
sp.id as spid,
sp.show_type as spShowType
sp.show_type as spShowType,
d.milestone as milestone
FROM
t_pro_task_sub_time s LEFT JOIN t_pro_task_detail d ON s.task_detail_id = d.id
LEFT JOIN t_pro_task_plugin p ON p.task_detail_id = d.id
@ -511,5 +518,50 @@
s.end_time &gt; #{startTime}
</if>
</select>
<select id="getTaskById" resultType="com.ccsens.tall.bean.vo.TaskVo$TaskListByProjectId">
SELECT
t.id as detailId,
t.`name`,
t.description,
t.begin_time as beginTime,
t.end_time as endTime,
t.cycle as cycle,
t.money as money,
t.project_id as projectId,
(SELECT `name` FROM t_sys_project WHERE id = t.project_id) as projectName,
t.executor_role as executorRole,
(SELECT `name` FROM t_pro_role WHERE id = t.executor_role) as executorRoleName,
d.id as deliverId,
d.`name` as deliverName
FROM
t_pro_task_detail t
LEFT JOIN t_pro_task_deliver d on t.id = d.task_detail_id
WHERE
t.id = #{detailTaskId}
and t.rec_status = 0
limit 1
</select>
<select id="getTaskByParentId" resultType="com.ccsens.tall.bean.vo.TaskVo$TaskListByProjectId">
SELECT
t.id as detailId,
t.`name`,
t.description,
t.begin_time as beginTime,
t.end_time as endTime,
t.cycle as cycle,
t.money as money,
t.project_id as projectId,
(SELECT `name` FROM t_sys_project WHERE id = t.project_id) as projectName,
t.executor_role as executorRole,
(SELECT `name` FROM t_pro_role WHERE id = t.executor_role) as executorRoleName,
d.id as deliverId,
d.`name` as deliverName
FROM
t_pro_task_detail t
LEFT JOIN t_pro_task_deliver d on t.id = d.task_detail_id
WHERE
t.parent_id = #{parentTaskId}
and t.rec_status = 0
</select>
</mapper>

30
tall/src/main/resources/mapper_raw/ProRoleMapper.xml

@ -11,6 +11,7 @@
<result column="created_at" jdbcType="TIMESTAMP" property="createdAt" />
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="rec_status" jdbcType="TINYINT" property="recStatus" />
<result column="relevance_project_id" jdbcType="BIGINT" property="relevanceProjectId" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@ -71,7 +72,8 @@
</where>
</sql>
<sql id="Base_Column_List">
id, project_id, parent_id, name, description, sequence, created_at, updated_at, rec_status
id, project_id, parent_id, name, description, sequence, created_at, updated_at, rec_status,
relevance_project_id
</sql>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.ProRoleExample" resultMap="BaseResultMap">
select
@ -106,12 +108,12 @@
<insert id="insert" parameterType="com.ccsens.tall.bean.po.ProRole">
insert into t_pro_role (id, project_id, parent_id,
name, description, sequence,
created_at, updated_at, rec_status
)
created_at, updated_at, rec_status,
relevance_project_id)
values (#{id,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{parentId,jdbcType=BIGINT},
#{name,jdbcType=VARCHAR}, #{description,jdbcType=VARCHAR}, #{sequence,jdbcType=INTEGER},
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}
)
#{createdAt,jdbcType=TIMESTAMP}, #{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT},
#{relevanceProjectId,jdbcType=BIGINT})
</insert>
<insert id="insertSelective" parameterType="com.ccsens.tall.bean.po.ProRole">
insert into t_pro_role
@ -143,6 +145,9 @@
<if test="recStatus != null">
rec_status,
</if>
<if test="relevanceProjectId != null">
relevance_project_id,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -172,6 +177,9 @@
<if test="recStatus != null">
#{recStatus,jdbcType=TINYINT},
</if>
<if test="relevanceProjectId != null">
#{relevanceProjectId,jdbcType=BIGINT},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.ccsens.tall.bean.po.ProRoleExample" resultType="java.lang.Long">
@ -210,6 +218,9 @@
<if test="record.recStatus != null">
rec_status = #{record.recStatus,jdbcType=TINYINT},
</if>
<if test="record.relevanceProjectId != null">
relevance_project_id = #{record.relevanceProjectId,jdbcType=BIGINT},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
@ -225,7 +236,8 @@
sequence = #{record.sequence,jdbcType=INTEGER},
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
rec_status = #{record.recStatus,jdbcType=TINYINT}
rec_status = #{record.recStatus,jdbcType=TINYINT},
relevance_project_id = #{record.relevanceProjectId,jdbcType=BIGINT}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -257,6 +269,9 @@
<if test="recStatus != null">
rec_status = #{recStatus,jdbcType=TINYINT},
</if>
<if test="relevanceProjectId != null">
relevance_project_id = #{relevanceProjectId,jdbcType=BIGINT},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
@ -269,7 +284,8 @@
sequence = #{sequence,jdbcType=INTEGER},
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
rec_status = #{recStatus,jdbcType=TINYINT}
rec_status = #{recStatus,jdbcType=TINYINT},
relevance_project_id = #{relevanceProjectId,jdbcType=BIGINT}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

29
tall/src/main/resources/mapper_raw/ProTaskDetailMapper.xml

@ -29,6 +29,7 @@
<result column="updated_at" jdbcType="TIMESTAMP" property="updatedAt" />
<result column="rec_status" jdbcType="TINYINT" property="recStatus" />
<result column="priority" jdbcType="TINYINT" property="priority" />
<result column="milestone" jdbcType="TINYINT" property="milestone" />
</resultMap>
<sql id="Example_Where_Clause">
<where>
@ -92,7 +93,7 @@
id, project_id, name, description, begin_time, end_time, cycle, parent_id, sub_task,
sub_project_id, sub_project, executor_role, checker_role, money, delay, delay_time,
loop_to, loop_times, virtual, level, has_group, finish_need_all, all_member, created_at,
updated_at, rec_status, priority
updated_at, rec_status, priority, milestone
</sql>
<select id="selectByExample" parameterType="com.ccsens.tall.bean.po.ProTaskDetailExample" resultMap="BaseResultMap">
select
@ -133,8 +134,8 @@
delay_time, loop_to, loop_times,
virtual, level, has_group,
finish_need_all, all_member, created_at,
updated_at, rec_status, priority
)
updated_at, rec_status, priority,
milestone)
values (#{id,jdbcType=BIGINT}, #{projectId,jdbcType=BIGINT}, #{name,jdbcType=VARCHAR},
#{description,jdbcType=VARCHAR}, #{beginTime,jdbcType=BIGINT}, #{endTime,jdbcType=BIGINT},
#{cycle,jdbcType=VARCHAR}, #{parentId,jdbcType=BIGINT}, #{subTask,jdbcType=VARCHAR},
@ -143,8 +144,8 @@
#{delayTime,jdbcType=BIGINT}, #{loopTo,jdbcType=BIGINT}, #{loopTimes,jdbcType=INTEGER},
#{virtual,jdbcType=TINYINT}, #{level,jdbcType=TINYINT}, #{hasGroup,jdbcType=TINYINT},
#{finishNeedAll,jdbcType=TINYINT}, #{allMember,jdbcType=TINYINT}, #{createdAt,jdbcType=TIMESTAMP},
#{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}, #{priority,jdbcType=TINYINT}
)
#{updatedAt,jdbcType=TIMESTAMP}, #{recStatus,jdbcType=TINYINT}, #{priority,jdbcType=TINYINT},
#{milestone,jdbcType=TINYINT})
</insert>
<insert id="insertSelective" parameterType="com.ccsens.tall.bean.po.ProTaskDetail">
insert into t_pro_task_detail
@ -230,6 +231,9 @@
<if test="priority != null">
priority,
</if>
<if test="milestone != null">
milestone,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="id != null">
@ -313,6 +317,9 @@
<if test="priority != null">
#{priority,jdbcType=TINYINT},
</if>
<if test="milestone != null">
#{milestone,jdbcType=TINYINT},
</if>
</trim>
</insert>
<select id="countByExample" parameterType="com.ccsens.tall.bean.po.ProTaskDetailExample" resultType="java.lang.Long">
@ -405,6 +412,9 @@
<if test="record.priority != null">
priority = #{record.priority,jdbcType=TINYINT},
</if>
<if test="record.milestone != null">
milestone = #{record.milestone,jdbcType=TINYINT},
</if>
</set>
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
@ -438,7 +448,8 @@
created_at = #{record.createdAt,jdbcType=TIMESTAMP},
updated_at = #{record.updatedAt,jdbcType=TIMESTAMP},
rec_status = #{record.recStatus,jdbcType=TINYINT},
priority = #{record.priority,jdbcType=TINYINT}
priority = #{record.priority,jdbcType=TINYINT},
milestone = #{record.milestone,jdbcType=TINYINT}
<if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" />
</if>
@ -524,6 +535,9 @@
<if test="priority != null">
priority = #{priority,jdbcType=TINYINT},
</if>
<if test="milestone != null">
milestone = #{milestone,jdbcType=TINYINT},
</if>
</set>
where id = #{id,jdbcType=BIGINT}
</update>
@ -554,7 +568,8 @@
created_at = #{createdAt,jdbcType=TIMESTAMP},
updated_at = #{updatedAt,jdbcType=TIMESTAMP},
rec_status = #{recStatus,jdbcType=TINYINT},
priority = #{priority,jdbcType=TINYINT}
priority = #{priority,jdbcType=TINYINT},
milestone = #{milestone,jdbcType=TINYINT}
where id = #{id,jdbcType=BIGINT}
</update>
</mapper>

9
util/src/main/java/com/ccsens/util/PoiUtil.java

@ -175,7 +175,8 @@ public class PoiUtil {
if(StrUtil.isNotEmpty(cell.getFunction())) {
newCell.setCellFormula(cell.getFunction());
}
style.setFillForegroundColor(IndexedColors.RED.getIndex());
//设置自动换行
style.setWrapText(true);
newCell.setCellStyle(style);
}
}
@ -451,12 +452,6 @@ public class PoiUtil {
/**
* 插入图片
*/
private static void insertImage(){
}
/**
*
* @param row1起始行
* @param row2终止行
* @param col1起始列

3
util/src/main/java/com/ccsens/util/WebConstant.java

@ -241,7 +241,8 @@ public class WebConstant {
God("God","上帝"),ManageRepresent("ManageRepresent","管代"),Stakeholder("Stakeholder","干系人"),
PM("PM","项目经理"),Member("Member","项目成员"),MVP("MVP","MVP")
,Attention("Attention","关注者"),Creator("Creator","创建者")
,MoneyStakeholder("MoneyStakeholder","奖惩干系人"),AllMember("AllMember","全体成员");
,MoneyStakeholder("MoneyStakeholder","奖惩干系人"),AllMember("AllMember","全体成员")
,ProjectVirtualRole("ProjectVirtualRole","角色项目");
public String value;
public String phase;

8
util/src/main/java/com/ccsens/util/cron/CronConstant.java

@ -54,11 +54,13 @@ public class CronConstant {
// TaskCron week = getCronDay("每周7");
// System.out.println("周1:" + week);
// System.out.println("周一:" + getDate(week,start, end));
//
TaskCron workday = getCronDay("每周一-周五 18点");
////
// TaskCron workday = getCronDay("每周一-周五 18点");
// System.out.println("工作日:" + workday);
// System.out.println("工作日:" + getDate(workday,start, end));
TaskCron workday = getCronDay("每周一-周五 15点30分-15点45分");
System.out.println("工作日:" + workday);
System.out.println("工作日:" + getDate(workday,start, end));
// System.out.println(generateDates("每天9点,10点", start, end));
}

24
util/src/test/java/com/ccsens/util/Base64Test.java

@ -1,6 +1,8 @@
package com.ccsens.util;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.util.ObjectUtil;
import com.ccsens.util.exception.BaseException;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
@ -33,7 +35,27 @@ public class Base64Test {
@Test
public void test02() throws Exception {
// String a = "abcdefg";
// byte[] bytes = a.getBytes();
// byte[] bytes1 = new byte[bytes.length];
// byte[] bytes2 = new byte[bytes.length];
// for (int i = 0; i < bytes.length; i++) {
// bytes1[i] = (byte) (bytes[i]^ 0xff);
// }
// for (int i = 0; i < bytes1.length; i++) {
// bytes2[i] = (byte) (bytes1[i]^ 0xff);
// System.out.print(bytes2[i]+" ");
// }
// String c = new String(bytes1);
// String b = new String(bytes2);
// System.out.println(b);
// System.out.println(c);
try {
String a = "ax15";
System.out.println(Long.parseLong(a));
}catch (NumberFormatException e){
throw new BaseException("ssss");
}
}

6
util/src/test/java/com/ccsens/util/TestQrCord.java

@ -28,9 +28,9 @@ public class TestQrCord {
// String fileName = "zzz/" + DateUtil.today() + "/" + i+"组" + ".png";
// String text = "https://www.tall.wiki/pt-dev/respond?groupId="+i+"&groupName="+i+"组";
String text = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx7af1bf1e14facf82&redirect_uri=http://www.tall.wiki/pt-dev/vote&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
// String text = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx7af1bf1e14facf82&redirect_uri=http://test.tall.wiki/compete&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
String fileName = "zzz/" + "远程比赛(生产).png";
// String text = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx7af1bf1e14facf82&redirect_uri=http://www.tall.wiki/pt-dev/vote&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
String text = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx7af1bf1e14facf82&redirect_uri=https://www.tall.wiki/compete-province&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect";
String fileName = "zzz/" + "远程比赛-省赛(生产).png";
QRCodeWriter qrCodeWriter = new QRCodeWriter();

Loading…
Cancel
Save