Browse Source

feat: project statistics

Blizzard 1 year ago
parent
commit
b9977d2e00

+ 3 - 0
blade-service-api/wt-okr-api/src/main/java/com/wtkj/dto/ProjectTaskPageDTO.java

@@ -1,5 +1,7 @@
 package com.wtkj.dto;
 
+import com.fasterxml.jackson.databind.annotation.JsonSerialize;
+import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -17,6 +19,7 @@ public class ProjectTaskPageDTO implements Serializable {
 	private static final long serialVersionUID = 1L;
 
 	@NotNull(message = "projectId can't be null")
+	@JsonSerialize(using = ToStringSerializer.class)
 	private Long projectId;
 
 	private String name;

+ 4 - 4
blade-service-api/wt-okr-api/src/main/java/com/wtkj/entity/Project.java

@@ -68,13 +68,13 @@ public class Project extends BaseEntity {
 	@ApiModelProperty(value = "行业分类")
 	private Long industryId;
 
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
 	@ApiModelProperty(value = "开始时间")
 	private Date startTime;
 
-	@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm")
-	@JsonFormat(pattern = "yyyy-MM-dd HH:mm")
+	@DateTimeFormat(pattern = "yyyy-MM-dd")
+	@JsonFormat(pattern = "yyyy-MM-dd")
 	@ApiModelProperty(value = "截止时间")
 	private Date endTime;
 

+ 1 - 0
blade-service-api/wt-okr-api/src/main/java/com/wtkj/entity/Task.java

@@ -28,6 +28,7 @@ public class Task extends BaseEntity {
 
 	@JsonSerialize(using = ToStringSerializer.class)
 	@TableField("project_id")
+	@NotNull(message = "projectId can't be null")
 	private Long projectId;
 
 	@TableField("title")

+ 2 - 2
blade-service-api/wt-okr-api/src/main/java/com/wtkj/vo/MyIndexTaskStatistics.java

@@ -14,10 +14,10 @@ public class MyIndexTaskStatistics implements Serializable {
 
 	private static final long serialVersionUID = 1L;
 
-	private Integer all;
+	private Integer all = 0;
 
 	private Integer todayTodo = 0;
 
-	private Integer expire;
+	private Integer expire = 0;
 
 }

+ 41 - 15
blade-service/wt-okr/src/main/java/com/wtkj/controller/ProjectController.java

@@ -94,7 +94,7 @@ public class ProjectController {
 	/**
 	 * 修改阶段
 	 */
-	@GetMapping("/submit-stage")
+	@PostMapping("/submit-stage")
 	@ApiOperation(value = "修改项目阶段", notes = "")
 	@ApiOperationSupport(order = 5)
 	public R submitStage(@RequestBody ProjectStage stage) {
@@ -105,29 +105,18 @@ public class ProjectController {
 	 * 项目列表统计
 	 */
 	@GetMapping("/project-statistics")
-	@ApiOperation(value = "项目统计", notes = "")
+	@ApiOperation(value = "项目列表统计", notes = "")
 	@ApiOperationSupport(order = 6)
 	public R projectStatistics(@RequestParam Long topDept, @RequestParam Integer deptCategory, @RequestParam String year) {
 		return R.data(projectService.projectStatistics(topDept, deptCategory, year));
 	}
 
-	/**
-	 * 工作台任务统计
-	 */
-	@GetMapping("/task-summary")
-	@ApiOperation(value = "项目任务统计", notes = "传入projectId")
-	@ApiOperationSupport(order = 7)
-	public R<MyTaskStatistics> taskStatistics(@RequestParam Long projectId) {
-		return R.data(taskService.TaskStatistics(projectId, null, null));
-	}
-
-
 	/**
 	 * 项目小组
 	 */
 	@GetMapping("/project-group-mem")
 	@ApiOperation(value = "项目组成员", notes = "传入projectId,competentUnit:主管单位")
-	@ApiOperationSupport(order = 8)
+	@ApiOperationSupport(order = 7)
 	public R groupMem(@RequestParam Long projectId, @RequestParam Long competentUnit) {
 		List<ProjectGroup> list = projectGroupService.getGroupByProjectId(projectId, competentUnit);
 		return R.data(ProjectGroupWrapper.build().listVO(list));
@@ -135,11 +124,48 @@ public class ProjectController {
 
 	@GetMapping("/project-detail")
 	@ApiOperation(value = "项目详情", notes = "")
-	@ApiOperationSupport(order = 9)
+	@ApiOperationSupport(order = 8)
 	public R detail(@RequestParam Long projectId) {
 		Project byId = projectService.getById(projectId);
 		return R.data(ProjectWrapper.build().entityVO(byId));
 	}
 
+	/**
+	 * 工作台任务统计
+	 */
+	@GetMapping("/task-summary")
+	@ApiOperation(value = "项目任务统计", notes = "传入projectId")
+	@ApiOperationSupport(order = 9)
+	public R<MyTaskStatistics> taskStatistics(@RequestParam Long projectId) {
+		return R.data(taskService.taskStatistics(projectId, null, null));
+	}
+
+	/**
+	 * 任务分布
+	 */
+	@GetMapping("/task-distribution")
+	@ApiOperation(value = "任务分布", notes = "传入projectId")
+	@ApiOperationSupport(order = 10)
+	public R projectTaskSummary(@RequestParam Long projectId) {
+		return R.data(taskService.projectTaskSummary(projectId));
+	}
+
+	/**
+	 * 任务进展走势
+	 */
+	@GetMapping("/task-situation")
+	@ApiOperation(value = "任务进展走势", notes = "传入projectId")
+	@ApiOperationSupport(order = 11)
+	public R projectTaskSituation() {
+		return R.data(null);
+	}
+
+	@GetMapping("/task-burnout")
+	@ApiOperation(value = "任务燃尽", notes = "传入projectId")
+	@ApiOperationSupport(order = 12)
+	public R projectTaskBurnout() {
+		return R.data(null);
+	}
+
 
 }

+ 1 - 1
blade-service/wt-okr/src/main/java/com/wtkj/controller/TaskController.java

@@ -63,7 +63,7 @@ public class TaskController {
 	@ApiOperationSupport(order = 2)
 	@ApiOperation(value = "我的任务统计", notes = "")
 	public R myTask(@RequestParam Integer year, @RequestParam Integer month) {
-		return R.data(taskService.TaskStatistics(null, year, month));
+		return R.data(taskService.taskStatistics(null, year, month));
 	}
 
 	/**

+ 15 - 1
blade-service/wt-okr/src/main/java/com/wtkj/service/ITaskService.java

@@ -7,6 +7,7 @@ import com.wtkj.vo.MyTaskStatistics;
 import org.springblade.core.mp.base.BaseService;
 
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 /**
@@ -30,7 +31,7 @@ public interface ITaskService extends BaseService<Task> {
 	/**
 	 * 复用  复用
 	 */
-	MyTaskStatistics TaskStatistics(Long projectId, Integer year, Integer month);
+	MyTaskStatistics taskStatistics(Long projectId, Integer year, Integer month);
 
 
 	List<Task> listByUser(Long userId, Integer year, Integer month);
@@ -72,4 +73,17 @@ public interface ITaskService extends BaseService<Task> {
 
 	List<Task> getTodoByYear(Set<Long> projectIds, String year);
 
+	/**
+	 * 项目任务饼图
+	 */
+	List<Map<String, Integer>> projectTaskSummary(Long projectId);
+
+	/**
+	 * 项目和项目执行人
+	 *
+	 * @param userId
+	 * @param projectId
+	 * @return
+	 */
+	List<Task> listByUserAndProject(Long userId, Long projectId);
 }

+ 47 - 9
blade-service/wt-okr/src/main/java/com/wtkj/service/impl/TaskServiceImpl.java

@@ -20,14 +20,14 @@ import org.springblade.core.secure.utils.AuthUtil;
 import org.springblade.core.tool.api.R;
 import org.springblade.core.tool.utils.DateUtil;
 import org.springblade.core.tool.utils.Func;
+import org.springblade.core.tool.utils.StringUtil;
+import org.springblade.system.user.entity.User;
+import org.springblade.system.user.feign.IUserClient;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import java.time.LocalDate;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
 
 /**
  * @author Blizzard
@@ -42,6 +42,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 	private final ITaskFileService taskFileService;
 	private final IFileAndFolderService fileAndFolderService;
 	private final IFileClient fileClient;
+	private final IUserClient userClient;
 
 	@Override
 	public boolean submit(Task task) {
@@ -189,7 +190,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 	}
 
 	@Override
-	public MyTaskStatistics TaskStatistics(Long projectId, Integer year, Integer month) {
+	public MyTaskStatistics taskStatistics(Long projectId, Integer year, Integer month) {
 		MyTaskStatistics statistics = new MyTaskStatistics();
 		Long userId = AuthUtil.getUserId();
 		List<Task> tasks = null;
@@ -254,10 +255,7 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 		if (month != null) {
 			lqw.eq(Task::getMonth, month);
 		}
-		lqw.and(wq -> {
-			wq.eq(Task::getCreateUser, userId);
-			wq.or().like(Task::getExecuteUser, String.valueOf(userId));
-		});
+		lqw.like(Task::getExecuteUser, String.valueOf(userId));
 		lqw.orderByAsc(Task::getEndTime);
 		return this.list(lqw);
 	}
@@ -321,4 +319,44 @@ public class TaskServiceImpl extends BaseServiceImpl<TaskMapper, Task> implement
 	public List<Task> getTodoByYear(Set<Long> projectIds, String year) {
 		return baseMapper.getTodoByYear(projectIds, Integer.valueOf(year));
 	}
+
+	@Override
+	public List<Map<String, Integer>> projectTaskSummary(Long projectId) {
+		List<Map<String, Integer>> res = new ArrayList<>();
+		//项目下任务执行者的情况
+		Set<Long> userIds = new HashSet<>();
+		List<Task> tasks = this.listByProjectId(projectId);
+		if (!CollectionUtils.isEmpty(tasks)) {
+			for (Task task : tasks) {
+				String executeUser = task.getExecuteUser();
+				if (StringUtil.isNotBlank(executeUser)) {
+					List<Long> ids = Func.toLongList(executeUser);
+					userIds.addAll(ids);
+				}
+			}
+		}
+		if (!CollectionUtils.isEmpty(userIds)) {
+			userIds.forEach(userId -> {
+				Map<String, Integer> map = new HashMap<>();
+				R<User> userR = userClient.userInfoById(userId);
+				if (userR.isSuccess()) {
+					List<Task> tasks1 = this.listByUserAndProject(userId, projectId);
+					if (!CollectionUtils.isEmpty(tasks1)) {
+						map.put(userR.getData().getName(), tasks1.size());
+						res.add(map);
+					}
+				}
+			});
+		}
+		return res;
+	}
+
+	@Override
+	public List<Task> listByUserAndProject(Long userId, Long projectId) {
+		LambdaQueryWrapper<Task> lqw = new LambdaQueryWrapper<>();
+		lqw.eq(Task::getProjectId, projectId);
+		lqw.like(Task::getExecuteUser, String.valueOf(userId));
+		lqw.orderByAsc(Task::getEndTime);
+		return this.list(lqw);
+	}
 }