Browse Source

问卷数据分析功能

dev
Bemege 4 years ago
parent
commit
1835a5b97f
  1. 12
      tduck-api/src/main/java/com/tduck/cloud/api/web/controller/ProjectDashboardController.java
  2. 8
      tduck-project/src/main/java/com/tduck/cloud/project/service/ProjectDashboardService.java
  3. 68
      tduck-project/src/main/java/com/tduck/cloud/project/service/impl/ProjectDashboardServiceImpl.java
  4. 25
      tduck-project/src/main/java/com/tduck/cloud/project/vo/ProjectReportVO.java

12
tduck-api/src/main/java/com/tduck/cloud/api/web/controller/ProjectDashboardController.java

@ -8,6 +8,8 @@ import com.tduck.cloud.common.util.Result;
import com.tduck.cloud.project.entity.UserProjectResultEntity;
import com.tduck.cloud.project.service.ProjectDashboardService;
import com.tduck.cloud.project.service.UserProjectResultService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@ -24,6 +26,7 @@ import static com.tduck.cloud.project.constant.ProjectRedisKeyConstants.PROJECT_
@RestController
@RequiredArgsConstructor
@Api(tags = "Dashboard")
public class ProjectDashboardController {
private final RedisUtils redisUtils;
@ -83,4 +86,13 @@ public class ProjectDashboardController {
public Result projectReportSource(String projectKey) {
return Result.success(projectDashboardService.projectReportSource(projectKey));
}
/**
* 数据分析
*/
@Login
@GetMapping("/user/project/report/analysis")
public Result projectReportAnalysis(String projectKey){
return Result.success(projectDashboardService.projectReportAnalysis(projectKey));
}
}

8
tduck-project/src/main/java/com/tduck/cloud/project/service/ProjectDashboardService.java

@ -46,4 +46,12 @@ public interface ProjectDashboardService {
* @return
*/
List<ProjectReportVO.Source> projectReportSource(String projectKey);
/**
*
* @param projectKey
* @return
*/
List<ProjectReportVO.Analysis> projectReportAnalysis(String projectKey);
}

68
tduck-project/src/main/java/com/tduck/cloud/project/service/impl/ProjectDashboardServiceImpl.java

@ -8,10 +8,18 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.CharUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.google.common.collect.Lists;
import com.tduck.cloud.project.entity.UserProjectItemEntity;
import com.tduck.cloud.project.entity.UserProjectResultEntity;
import com.tduck.cloud.project.entity.enums.ProjectItemTypeEnum;
import com.tduck.cloud.project.mapper.ProjectDashboardMapper;
import com.tduck.cloud.project.service.ProjectDashboardService;
import com.tduck.cloud.project.service.UserProjectItemService;
import com.tduck.cloud.project.service.UserProjectResultService;
import com.tduck.cloud.project.vo.ProjectReportVO;
import lombok.RequiredArgsConstructor;
import lombok.Value;
import org.springframework.stereotype.Service;
import java.util.*;
@ -27,6 +35,10 @@ import java.util.stream.Collectors;
public class ProjectDashboardServiceImpl implements ProjectDashboardService {
private final ProjectDashboardMapper projectDashboardMapper;
private final UserProjectResultService userProjectResultService;
private final UserProjectItemService userProjectItemService;
@Override
public Collection<ProjectReportVO.Situation> projectReportSituation(String projectKey) {
@ -61,4 +73,60 @@ public class ProjectDashboardServiceImpl implements ProjectDashboardService {
public List<ProjectReportVO.Source> projectReportSource(String projectKey) {
return projectDashboardMapper.selectProjectReportSource(projectKey);
}
@Override
public List<ProjectReportVO.Analysis> projectReportAnalysis(String projectKey) {
List<ProjectItemTypeEnum> typeEnumList = Lists.newArrayList(
ProjectItemTypeEnum.RADIO,
ProjectItemTypeEnum.CHECKBOX,
ProjectItemTypeEnum.SELECT
);
// 题目
List<UserProjectItemEntity> projectItemList = userProjectItemService.list(new QueryWrapper<UserProjectItemEntity>().lambda().eq(UserProjectItemEntity::getProjectKey, projectKey));
// 结果
List<UserProjectResultEntity> projectResultList = userProjectResultService.list(new QueryWrapper<UserProjectResultEntity>().lambda().select(UserProjectResultEntity::getProcessData).eq(UserProjectResultEntity::getProjectKey, projectKey));
// 标题label与id的对应值
Map<String, ProjectReportVO.Analysis> formMap = new LinkedHashMap<>();
// 储存标题与可选项
Map<String, Map<String, Integer>> map = new HashMap<>();
for (UserProjectItemEntity userProjectItemEntity : projectItemList) {
if (typeEnumList.contains(userProjectItemEntity.getType())){
Map<String, Integer> optionMap = new LinkedHashMap<>();
List<Map<String,Object>> options = (List<Map<String,Object>>)userProjectItemEntity.getExpand().get("options");
for (Map<String, Object> option : options) {
optionMap.put(option.get("label").toString(), 0);
}
// 单选框类型
map.put("field"+userProjectItemEntity.getFormItemId(),optionMap);
// id and label
ProjectReportVO.Analysis analysis = new ProjectReportVO.Analysis();
analysis.setLabel(userProjectItemEntity.getLabel());
analysis.setType(userProjectItemEntity.getType().getDesc());
formMap.put("field"+userProjectItemEntity.getFormItemId(), analysis);
}
}
for (UserProjectResultEntity userProjectResultEntity : projectResultList) {
Map<String, Object> processData = userProjectResultEntity.getProcessData();
for (Map.Entry<String, Map<String, Integer>> entry : map.entrySet()) {
if (processData.containsKey(entry.getKey())){
// 结果中字段值 处理多选
String[] fieldValues = processData.get(entry.getKey()).toString().split(",");
for (int i = 0; i < fieldValues.length; i++) {
// 获取问题集合中对应的选项的count
Integer count = entry.getValue().get(fieldValues[i]);
entry.getValue().put(fieldValues[i], count +1);
}
}
formMap.get(entry.getKey()).setFieldName(new ArrayList(entry.getValue().keySet()));
formMap.get(entry.getKey()).setData(new ArrayList(entry.getValue().values()));
formMap.get(entry.getKey()).setMap(entry.getValue());
}
}
List<ProjectReportVO.Analysis> result = new ArrayList(formMap.values());
return result;
}
}

25
tduck-project/src/main/java/com/tduck/cloud/project/vo/ProjectReportVO.java

@ -5,6 +5,9 @@ import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
import java.util.Map;
/**
* @author : smalljop
* @description : 项目报表
@ -77,4 +80,26 @@ public class ProjectReportVO {
private Integer count;
}
/**
* 反馈数据分析
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public static class Analysis {
/** 类型 */
private String type;
/** 题目名称 */
private String label;
/** 标签集 */
private List<String> fieldName;
/** 数据集 */
private List<Integer> data;
/** 合集 */
private Map map;
/** 图表类型 */
private String chartType = "pie";
}
}

Loading…
Cancel
Save