[Feature] 新增问卷列表查询接口及相关单元测试 (#377)
* feat: 1,添加修改问卷,删除问卷接口,修改创建问卷 部分逻辑 2,添加修改问卷,删除问卷接口单元测试 * feat: 1,添加修改问卷,删除问卷接口,修改创建问卷 部分逻辑 2,添加修改问卷,删除问卷接口单元测试 * style:代码格式化调整 * style:代码格式化调整 * feat:新增发布问卷接口,同时修改了创建问卷接口 * feat:新增问卷列表查询接口及相关单元测试 * feat:修改变量名 --------- Co-authored-by: kui <likui@jiuhy.cn>
This commit is contained in:
parent
c2ccdca147
commit
92f11f81a7
@ -0,0 +1,14 @@
|
||||
package com.xiaojusurvey.engine.common.constants;
|
||||
|
||||
/**
|
||||
* Survey 常量
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/8/3 12:24
|
||||
*/
|
||||
public class SurveyConstant {
|
||||
|
||||
public static final String OPT_OR = "$or";
|
||||
public static final String OPT_NE = "$ne";
|
||||
public static final String OPT_REGEX = "$regex";
|
||||
}
|
@ -57,5 +57,14 @@ public class SurveyMeta extends BaseEntity {
|
||||
*/
|
||||
private String owner;
|
||||
|
||||
/**
|
||||
* 所有者ID
|
||||
*/
|
||||
private String ownerId;
|
||||
|
||||
/**
|
||||
* 空间
|
||||
*/
|
||||
private String workspaceId;
|
||||
|
||||
}
|
||||
|
@ -2,7 +2,9 @@ package com.xiaojusurvey.engine.core.survey;
|
||||
|
||||
import com.xiaojusurvey.engine.common.entity.survey.SurveyMeta;
|
||||
import com.xiaojusurvey.engine.core.reslut.IdResult;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyListParam;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyMetaUpdateParam;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyListVO;
|
||||
|
||||
/**
|
||||
* @Author: LYF
|
||||
@ -26,6 +28,12 @@ public interface SurveyService {
|
||||
*/
|
||||
boolean publishSurvey(String surveyId);
|
||||
|
||||
/**
|
||||
* 获取问卷列表
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
SurveyListVO getSurveyList(SurveyListParam param);
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,21 @@
|
||||
package com.xiaojusurvey.engine.core.survey.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 查询基础条件
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/8/1 21:14
|
||||
*/
|
||||
@Data
|
||||
public class BaseQuery implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 3378327499951251208L;
|
||||
private int pageSize = 10;
|
||||
private int curPage = 1;
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package com.xiaojusurvey.engine.core.survey.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* TODO
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/8/1 20:59
|
||||
*/
|
||||
@Data
|
||||
public class FilterItem {
|
||||
/**
|
||||
* 比较符
|
||||
*/
|
||||
private String comparator;
|
||||
|
||||
private FilterCondition condition;
|
||||
|
||||
|
||||
@Data
|
||||
public static class FilterCondition {
|
||||
/**
|
||||
* 字段名
|
||||
*/
|
||||
private String field;
|
||||
/**
|
||||
* 比较符
|
||||
*/
|
||||
private String comparator;
|
||||
/**
|
||||
* 筛选条件
|
||||
*/
|
||||
private String value;
|
||||
}
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package com.xiaojusurvey.engine.core.survey.dto;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 排序条件
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/8/1 20:59
|
||||
*/
|
||||
@Data
|
||||
public class OrderItem {
|
||||
/**
|
||||
* 字段名
|
||||
*/
|
||||
private String field;
|
||||
/**
|
||||
* 升序降序 1-升序,-1-降序
|
||||
*/
|
||||
private int value = 1;
|
||||
}
|
@ -3,6 +3,7 @@ package com.xiaojusurvey.engine.core.survey.impl;
|
||||
import java.util.ArrayList;
|
||||
|
||||
import com.xiaojusurvey.engine.common.constants.RespErrorCode;
|
||||
import com.xiaojusurvey.engine.common.constants.SurveyConstant;
|
||||
import com.xiaojusurvey.engine.common.entity.Status;
|
||||
import com.xiaojusurvey.engine.common.entity.survey.SurveyConf;
|
||||
import com.xiaojusurvey.engine.common.entity.survey.SurveyHistory;
|
||||
@ -17,20 +18,29 @@ import com.xiaojusurvey.engine.core.survey.SurveyConfService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyHistoryService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyPublishService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyService;
|
||||
import com.xiaojusurvey.engine.core.survey.dto.FilterItem;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyListParam;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyMetaUpdateParam;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyListVO;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyVO;
|
||||
import com.xiaojusurvey.engine.core.util.WebUtils;
|
||||
import com.xiaojusurvey.engine.repository.MongoRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.mongodb.core.query.Criteria;
|
||||
import org.springframework.data.mongodb.core.query.Query;
|
||||
import org.springframework.data.mongodb.core.query.Update;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.Arrays;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: LYF
|
||||
@ -175,5 +185,75 @@ public class SurveyServiceImpl implements SurveyService {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public SurveyListVO getSurveyList(SurveyListParam param) {
|
||||
log.info("[getSurveyList]获取问卷列表 param={}", param);
|
||||
Query query = buildQuery(param);
|
||||
List<SurveyMeta> list = mongoRepository.page(query, param.getCurPage() - 1, param.getPageSize(), SurveyMeta.class);
|
||||
Long count = mongoRepository.count(query, SurveyMeta.class);
|
||||
SurveyListVO vo = new SurveyListVO();
|
||||
vo.setCount(count);
|
||||
List<SurveyVO> data = new ArrayList<>();
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
data = list.stream().map(r -> {
|
||||
SurveyVO surveyVO = new SurveyVO();
|
||||
BeanUtils.copyProperties(r, surveyVO);
|
||||
return surveyVO;
|
||||
}).collect(Collectors.toList());
|
||||
}
|
||||
vo.setData(data);
|
||||
return vo;
|
||||
}
|
||||
|
||||
|
||||
private Query buildQuery(SurveyListParam param) {
|
||||
Query query = new Query();
|
||||
if (param.getOrder() != null) {
|
||||
List<Sort.Order> orders = new ArrayList<>();
|
||||
Arrays.stream(param.getOrder()).forEach(r -> {
|
||||
if (r.getValue() == 1) {
|
||||
orders.add(new Sort.Order(Sort.Direction.ASC, r.getField()));
|
||||
} else {
|
||||
orders.add(new Sort.Order(Sort.Direction.DESC, r.getField()));
|
||||
}
|
||||
});
|
||||
query.with(Sort.by(orders));
|
||||
}
|
||||
Criteria criteria = new Criteria();
|
||||
List<Criteria> listAnd = new ArrayList();
|
||||
List<Criteria> listOr = new ArrayList();
|
||||
if (StringUtils.hasLength(param.getWorkspaceId())) {
|
||||
listAnd.add(Criteria.where("workspaceId").is(param.getWorkspaceId()));
|
||||
}
|
||||
if (StringUtils.hasLength(param.getUsername())) {
|
||||
listAnd.add(Criteria.where("owner").is(param.getUsername()));
|
||||
}
|
||||
if (StringUtils.hasLength(param.getUserId())) {
|
||||
listAnd.add(Criteria.where("ownerId").is(param.getUserId()));
|
||||
}
|
||||
if (param.getFilter() != null) {
|
||||
Arrays.stream(param.getFilter()).forEach(r -> {
|
||||
FilterItem.FilterCondition ff = r.getCondition();
|
||||
Criteria crt = null;
|
||||
if (SurveyConstant.OPT_NE.equals(ff.getComparator())) {
|
||||
crt = Criteria.where(ff.getField()).ne(ff.getValue());
|
||||
} else if (SurveyConstant.OPT_REGEX.equals(ff.getComparator())) {
|
||||
crt = Criteria.where(ff.getField()).regex(ff.getValue());
|
||||
}
|
||||
if (StringUtils.hasLength(r.getComparator()) && SurveyConstant.OPT_OR.equals(r.getComparator())) {
|
||||
listOr.add(crt);
|
||||
} else {
|
||||
listOr.add(crt);
|
||||
}
|
||||
});
|
||||
}
|
||||
if (!listAnd.isEmpty()) {
|
||||
criteria.andOperator(listAnd);
|
||||
}
|
||||
if (!listOr.isEmpty()) {
|
||||
criteria = criteria.orOperator(listOr);
|
||||
}
|
||||
query.addCriteria(criteria);
|
||||
return query;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,37 @@
|
||||
package com.xiaojusurvey.engine.core.survey.param;
|
||||
|
||||
import com.xiaojusurvey.engine.core.survey.dto.BaseQuery;
|
||||
import com.xiaojusurvey.engine.core.survey.dto.FilterItem;
|
||||
import com.xiaojusurvey.engine.core.survey.dto.OrderItem;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 问卷查询
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/8/1 21:05
|
||||
*/
|
||||
@Data
|
||||
public class SurveyListParam extends BaseQuery implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -6294820920444326423L;
|
||||
private FilterItem[] filter;
|
||||
|
||||
private OrderItem[] order;
|
||||
|
||||
@NotBlank(message = "空间id不能为空")
|
||||
private String workspaceId;
|
||||
/**
|
||||
* 所有者
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 所有者Id
|
||||
*/
|
||||
private String userId;
|
||||
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
package com.xiaojusurvey.engine.core.survey.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 问卷列表
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/8/1 21:36
|
||||
*/
|
||||
@Data
|
||||
public class SurveyListVO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 2263256769125151536L;
|
||||
/**
|
||||
* 问卷列表
|
||||
*/
|
||||
private List<SurveyVO> data;
|
||||
|
||||
/**
|
||||
* 总数量
|
||||
*/
|
||||
private Long count;
|
||||
}
|
@ -1,53 +1,56 @@
|
||||
//package com.xiaojusurvey.engine.core.survey.vo;
|
||||
//
|
||||
//import com.xiaojusurvey.engine.common.entity.Status;
|
||||
//
|
||||
//import javax.validation.constraints.NotBlank;
|
||||
//import javax.validation.constraints.NotNull;
|
||||
//
|
||||
///**
|
||||
// * 问卷信息
|
||||
// *
|
||||
// * @author likui63@163.com
|
||||
// * @Date 2024/7/28 21:57
|
||||
// */
|
||||
//public class SurveyVO {
|
||||
//
|
||||
// private String _id;
|
||||
//
|
||||
// private String name;
|
||||
// /**
|
||||
// * 问卷类型
|
||||
// */
|
||||
// @NotBlank(message = "问卷类型不能为空")
|
||||
// @NotNull(message = "问卷类型不能为空")
|
||||
// private String surveyType;
|
||||
//
|
||||
// /**
|
||||
// * 问卷短链
|
||||
// */
|
||||
// private String surveyPath;
|
||||
// /**
|
||||
// * 问卷标题
|
||||
// */
|
||||
// private String title;
|
||||
// /**
|
||||
// * 当前状态
|
||||
// */
|
||||
// private Status curStatus;
|
||||
//
|
||||
// /**
|
||||
// * 创建时间
|
||||
// */
|
||||
// private Long createDate;
|
||||
//
|
||||
// /**
|
||||
// * 创建人
|
||||
// */
|
||||
// private String creator;
|
||||
// /**
|
||||
// * 所有者
|
||||
// */
|
||||
// private String owner;
|
||||
//
|
||||
//}
|
||||
package com.xiaojusurvey.engine.core.survey.vo;
|
||||
|
||||
import com.xiaojusurvey.engine.common.entity.Status;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotBlank;
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 问卷信息
|
||||
*
|
||||
* @author likui63@163.com
|
||||
* @Date 2024/7/28 21:57
|
||||
*/
|
||||
@Data
|
||||
public class SurveyVO implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 6002962715728356197L;
|
||||
|
||||
private String name;
|
||||
/**
|
||||
* 问卷类型
|
||||
*/
|
||||
@NotBlank(message = "问卷类型不能为空")
|
||||
@NotNull(message = "问卷类型不能为空")
|
||||
private String surveyType;
|
||||
|
||||
/**
|
||||
* 问卷短链
|
||||
*/
|
||||
private String surveyPath;
|
||||
/**
|
||||
* 问卷标题
|
||||
*/
|
||||
private String title;
|
||||
/**
|
||||
* 当前状态
|
||||
*/
|
||||
private Status curStatus;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Long createDate;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private String creator;
|
||||
/**
|
||||
* 所有者
|
||||
*/
|
||||
private String owner;
|
||||
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.xiaojusurvey.engine.core.survey.impl;
|
||||
|
||||
|
||||
import com.xiaojusurvey.engine.common.entity.BaseEntity;
|
||||
import com.xiaojusurvey.engine.common.entity.Status;
|
||||
import com.xiaojusurvey.engine.common.entity.survey.SurveyConf;
|
||||
import com.xiaojusurvey.engine.common.entity.survey.SurveyMeta;
|
||||
@ -9,7 +10,10 @@ import com.xiaojusurvey.engine.common.enums.SurveyStatusEnum;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyConfService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyHistoryService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyPublishService;
|
||||
import com.xiaojusurvey.engine.core.survey.dto.FilterItem;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyListParam;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyMetaUpdateParam;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyListVO;
|
||||
import com.xiaojusurvey.engine.core.util.WebUtils;
|
||||
import com.xiaojusurvey.engine.repository.MongoRepository;
|
||||
import org.junit.Assert;
|
||||
@ -21,6 +25,7 @@ import org.mockito.InjectMocks;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockedStatic;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.internal.matchers.Any;
|
||||
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -118,4 +123,26 @@ public class SurveyServiceImplTest {
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getListTest() {
|
||||
SurveyListParam param = new SurveyListParam();
|
||||
param.setWorkspaceId("1");
|
||||
FilterItem item = new FilterItem();
|
||||
// item.setComparator("$regex");
|
||||
FilterItem.FilterCondition condition = new FilterItem.FilterCondition();
|
||||
condition.setComparator("$regex");
|
||||
condition.setField("title");
|
||||
condition.setValue("newTime3");
|
||||
item.setCondition(condition);
|
||||
param.setFilter(new FilterItem[]{item});
|
||||
List<BaseEntity> list = new ArrayList<>();
|
||||
|
||||
Mockito.when(mongoRepository.page(Mockito.any(), Mockito.anyInt(), Mockito.anyInt(), Mockito.any())).thenReturn(list);
|
||||
Mockito.when(mongoRepository.count(Mockito.any(), Mockito.any())).thenReturn(1L);
|
||||
|
||||
SurveyListVO vo = surveyService.getSurveyList(param);
|
||||
Assert.assertTrue("成功", vo.getCount() == 1);
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -13,9 +13,11 @@ import com.xiaojusurvey.engine.core.reslut.IdResult;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyConfService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyHistoryService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyService;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyListParam;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyMetaUpdateParam;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyInfoInVO;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyInfoOutVO;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyListVO;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
@ -146,4 +148,11 @@ public class SurveyController {
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/getList")
|
||||
public RpcResult getList(@RequestBody @Validated SurveyListParam param) {
|
||||
log.info("[publishSurvey] 发布问卷,param={}", param);
|
||||
SurveyListVO surveyListVO = surveyService.getSurveyList(param);
|
||||
return RpcResultUtil.createSuccessResult(surveyListVO);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -9,8 +9,10 @@ import com.xiaojusurvey.engine.config.BannerDataConfig;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyConfService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyHistoryService;
|
||||
import com.xiaojusurvey.engine.core.survey.SurveyService;
|
||||
import com.xiaojusurvey.engine.core.survey.param.SurveyListParam;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyInfoInVO;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyInfoOutVO;
|
||||
import com.xiaojusurvey.engine.core.survey.vo.SurveyListVO;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
@ -97,6 +99,16 @@ public class SurveyControllerTest {
|
||||
|
||||
Mockito.when(surveyService.publishSurvey(Mockito.any())).thenReturn(true);
|
||||
surveyController.publishSurvey("11111");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void getListTest() {
|
||||
SurveyListVO vo = new SurveyListVO();
|
||||
Mockito.when(surveyService.getSurveyList(Mockito.any())).thenReturn(vo);
|
||||
|
||||
RpcResult rs = surveyController.getList(new SurveyListParam());
|
||||
|
||||
Assert.assertEquals(vo,rs.getData());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user