更新代码

develop
soul2 7 months ago
parent 3b598b0e81
commit 7be8313b09
  1. 1
      .gitignore
  2. 9
      src/main/java/cn/soul2/jyjc/admin/controller/AnswerController.java
  3. 22
      src/main/java/cn/soul2/jyjc/admin/controller/QrController.java
  4. 7
      src/main/java/cn/soul2/jyjc/admin/controller/QuestionnaireController.java
  5. 2
      src/main/java/cn/soul2/jyjc/admin/controller/SubjectController.java
  6. 5
      src/main/java/cn/soul2/jyjc/admin/dto/AnswerPageQueryDTO.java
  7. 21
      src/main/java/cn/soul2/jyjc/admin/dto/AnswerSheetQueryDTO.java
  8. 21
      src/main/java/cn/soul2/jyjc/admin/dto/QnOptionsDTO.java
  9. 5
      src/main/java/cn/soul2/jyjc/admin/interceptor/FinallyInterceptor.java
  10. 10
      src/main/java/cn/soul2/jyjc/admin/repository/IQrRepository.java
  11. 11
      src/main/java/cn/soul2/jyjc/admin/repository/IQuestionnaireRepository.java
  12. 3
      src/main/java/cn/soul2/jyjc/admin/repository/ISubjectItemsRepository.java
  13. 3
      src/main/java/cn/soul2/jyjc/admin/repository/ISubjectRepository.java
  14. 80
      src/main/java/cn/soul2/jyjc/admin/repository/impl/AnswerSheetRepositoryImpl.java
  15. 16
      src/main/java/cn/soul2/jyjc/admin/repository/impl/QrRepositoryImpl.java
  16. 21
      src/main/java/cn/soul2/jyjc/admin/repository/impl/QuestionnaireRepositoryImpl.java
  17. 1
      src/main/java/cn/soul2/jyjc/admin/repository/impl/RefSubjectItemsRepositoryImpl.java
  18. 7
      src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectItemsRepositoryImpl.java
  19. 5
      src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectRepositoryImpl.java
  20. 11
      src/main/java/cn/soul2/jyjc/admin/service/IAnswerService.java
  21. 8
      src/main/java/cn/soul2/jyjc/admin/service/impl/AnswerServiceImpl.java
  22. 4
      src/main/java/cn/soul2/jyjc/admin/service/impl/SubjectServiceImpl.java
  23. 2
      src/main/java/cn/soul2/jyjc/admin/vo/AnswerDetailsVO.java
  24. 32
      src/main/java/cn/soul2/jyjc/admin/vo/AnswerPageVO.java
  25. 8
      src/main/java/cn/soul2/jyjc/admin/vo/AnswerSheetVO.java
  26. 5
      src/main/java/cn/soul2/jyjc/admin/vo/QrVO.java
  27. 34
      src/main/java/cn/soul2/jyjc/admin/vo/base/OptionsVO.java

1
.gitignore vendored

@ -32,3 +32,4 @@ build/
### VS Code ###
.vscode/
/.mvn/
/logs/

@ -1,9 +1,12 @@
package cn.soul2.jyjc.admin.controller;
import cn.soul2.jyjc.admin.dto.AnswerPageQueryDTO;
import cn.soul2.jyjc.admin.dto.AnswerSubmitDTO;
import cn.soul2.jyjc.admin.service.IAnswerService;
import cn.soul2.jyjc.admin.utils.base.BackUtils;
import cn.soul2.jyjc.admin.vo.AnswerSheetVO;
import cn.soul2.jyjc.admin.vo.base.Back;
import cn.soul2.jyjc.admin.vo.base.VPage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
@ -29,4 +32,10 @@ public class AnswerController {
return BackUtils.success(answerService.handleSubmit(dto));
}
@PostMapping("page")
public Back<VPage<AnswerSheetVO>> page(@RequestBody AnswerPageQueryDTO dto) {
return BackUtils.success(answerService.page(dto));
}
}

@ -1,22 +1,24 @@
package cn.soul2.jyjc.admin.controller;
import cn.soul2.jyjc.admin.annotation.SkinLogin;
import cn.soul2.jyjc.admin.dto.QrDTO;
import cn.soul2.jyjc.admin.entity.QrDO;
import cn.soul2.jyjc.admin.entity.QuestionnaireDO;
import cn.soul2.jyjc.admin.repository.IQrRepository;
import cn.soul2.jyjc.admin.repository.IQuestionnaireRepository;
import cn.soul2.jyjc.admin.utils.base.BackUtils;
import cn.soul2.jyjc.admin.utils.base.PageUtils;
import cn.soul2.jyjc.admin.vo.QrVO;
import cn.soul2.jyjc.admin.vo.base.Back;
import cn.soul2.jyjc.admin.vo.base.VPage;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -32,12 +34,19 @@ public class QrController {
@Autowired
IQrRepository qrRepository;
@Autowired
private IQuestionnaireRepository questionnaireRepository;
@PostMapping("/page")
Back<VPage<QrVO>> page(@RequestBody QrDTO dto) {
VPage<QrDO> page = qrRepository.page(dto);
Map<String, QuestionnaireDO> map = questionnaireRepository.mapByIds(page.getRows().stream().map(QrDO::getQnId).collect(Collectors.toSet()));
VPage<QrVO> toPage = PageUtils.to(page, page.getRows().stream().map(e -> {
QrVO vo = new QrVO();
BeanUtils.copyProperties(e, vo);
if (StringUtils.isNotBlank(vo.getQnId())) {
vo.setQnName(map.getOrDefault(vo.getQnId(), null).getName());
}
return vo;
}).collect(Collectors.toList()));
return BackUtils.success(toPage);
@ -58,5 +67,10 @@ public class QrController {
return BackUtils.success(qrRepository.status(dto));
}
@SkinLogin
@PostMapping("to/{query}")
public Back<String> qrQuery(@PathVariable String query) {
return BackUtils.success(qrRepository.getTo(query));
}
}

@ -1,5 +1,6 @@
package cn.soul2.jyjc.admin.controller;
import cn.soul2.jyjc.admin.dto.QnOptionsDTO;
import cn.soul2.jyjc.admin.dto.QnSubjectRefSaveDTO;
import cn.soul2.jyjc.admin.dto.QuestionnaireDTO;
import cn.soul2.jyjc.admin.dto.base.UpdateStatusDTO;
@ -8,6 +9,7 @@ import cn.soul2.jyjc.admin.repository.IRefQuestionnaireSubjectRepository;
import cn.soul2.jyjc.admin.utils.base.BackUtils;
import cn.soul2.jyjc.admin.vo.QuestionnaireVO;
import cn.soul2.jyjc.admin.vo.base.Back;
import cn.soul2.jyjc.admin.vo.base.OptionsVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -59,4 +61,9 @@ public class QuestionnaireController {
return BackUtils.success(refQuestionnaireSubjectRepository.updateRefSubjects(dto));
}
@PostMapping("options")
public Back<List<OptionsVO>> options(@RequestBody QnOptionsDTO dto) {
return BackUtils.success(questionnaireRepository.options(dto));
}
}

@ -1,5 +1,6 @@
package cn.soul2.jyjc.admin.controller;
import cn.soul2.jyjc.admin.annotation.SkinLogin;
import cn.soul2.jyjc.admin.dto.GetSubjectDTO;
import cn.soul2.jyjc.admin.dto.QnSubjectRefItemDTO;
import cn.soul2.jyjc.admin.dto.SubjectDTO;
@ -90,6 +91,7 @@ public class SubjectController {
}
@PostMapping("getSubject")
@SkinLogin
public Back<List<SubjectVO>> getSubject(@RequestBody GetSubjectDTO dto) {
if (StringUtils.isBlank(dto.getQnId())) {
QuestionnaireDO qn = questionnaireRepository.getTheLatestOne();

@ -23,4 +23,9 @@ public class AnswerPageQueryDTO extends PageParams {
*/
private String respondent;
/**
* qnId
*/
private String qnId;
}

@ -0,0 +1,21 @@
package cn.soul2.jyjc.admin.dto;
import cn.soul2.jyjc.admin.dto.base.PageParams;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author Soul2
* @date 2024-05-10 11:48
*/
@Data
@Accessors(chain = true)
public class AnswerSheetQueryDTO extends PageParams {
/**
* sheet id
*/
private String sheetId;
}

@ -0,0 +1,21 @@
package cn.soul2.jyjc.admin.dto;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* @author Soul2
* @date 2024-05-10 15:06
*/
@Data
@Accessors(chain = true)
public class QnOptionsDTO {
/**
* 查询状态 -1 or null: 所有
*/
private Integer status;
}

@ -7,8 +7,6 @@ import cn.soul2.jyjc.admin.filter.ShaoduoRequestWrapper;
import cn.soul2.jyjc.admin.service.IUserService;
import cn.soul2.jyjc.admin.utils.EncryptUtils;
import cn.soul2.jyjc.admin.vo.base.Back;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@ -93,8 +91,7 @@ public class FinallyInterceptor implements HandlerInterceptor {
return true;
}
String sourceParamBody = shaoduoRequestWrapper.getBodyString();
JSONObject obj = JSON.parseObject(EncryptUtils.decrypt(sourceParamBody));
String afterBody = JSONObject.toJSONString(obj);
String afterBody = EncryptUtils.decrypt(sourceParamBody);
shaoduoRequestWrapper.setBody(afterBody);
log.debug(String.format("解密: %s -> %s", sourceParamBody, afterBody));

@ -24,6 +24,14 @@ public interface IQrRepository extends IService<QrDO> {
Boolean remove(Collection<String> ids);
boolean status(QrDTO status);
/**
* 从二维码id读取跳转目标
* url的优先级大于问卷id
*
* @param id 二维码id
* @return {@link String}
*/
String getTo(String id);
}

@ -1,12 +1,18 @@
package cn.soul2.jyjc.admin.repository;
import cn.soul2.jyjc.admin.dto.QnOptionsDTO;
import cn.soul2.jyjc.admin.dto.QuestionnaireDTO;
import cn.soul2.jyjc.admin.dto.base.UpdateStatusDTO;
import cn.soul2.jyjc.admin.entity.QuestionnaireDO;
import cn.soul2.jyjc.admin.vo.QuestionnaireVO;
import cn.soul2.jyjc.admin.vo.base.OptionsVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* <p>
* 问卷表 服务类
@ -49,4 +55,9 @@ public interface IQuestionnaireRepository extends IService<QuestionnaireDO> {
*/
QuestionnaireDO getTheLatestOne();
List<OptionsVO> options(QnOptionsDTO dto);
Map<String, QuestionnaireDO> mapByIds(Collection<String> ids);
}

@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.List;
import java.util.Map;
/**
* <p>
@ -32,6 +33,8 @@ public interface ISubjectItemsRepository extends IService<SubjectItemsDO> {
*/
List<SubjectItemsDO> listBySubjectIds(Collection<String> subjectIds);
Map<String, SubjectItemsDO> mapByIds(Collection<String> ids);
/**
* 删除指定题目id下的所有选项
*

@ -10,6 +10,7 @@ import cn.soul2.jyjc.admin.vo.base.VPage;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.Collection;
import java.util.Map;
/**
* <p>
@ -62,4 +63,6 @@ public interface ISubjectRepository extends IService<SubjectDO> {
*/
VPage<SubjectChooseListDO> chooseList(QnSubjectRefItemDTO dto);
Map<String, SubjectDO> mapByIds(Collection<String> ids);
}

@ -1,21 +1,16 @@
package cn.soul2.jyjc.admin.repository.impl;
import cn.soul2.jyjc.admin.dto.AnswerPageQueryDTO;
import cn.soul2.jyjc.admin.entity.AnswerDetailsDO;
import cn.soul2.jyjc.admin.entity.AnswerSheetDO;
import cn.soul2.jyjc.admin.entity.QrDO;
import cn.soul2.jyjc.admin.entity.QuestionnaireDO;
import cn.soul2.jyjc.admin.entity.*;
import cn.soul2.jyjc.admin.mapper.AnswerSheetMapper;
import cn.soul2.jyjc.admin.repository.IAnswerDetailsRepository;
import cn.soul2.jyjc.admin.repository.IAnswerSheetRepository;
import cn.soul2.jyjc.admin.repository.IQrRepository;
import cn.soul2.jyjc.admin.repository.IQuestionnaireRepository;
import cn.soul2.jyjc.admin.repository.*;
import cn.soul2.jyjc.admin.utils.base.PageUtils;
import cn.soul2.jyjc.admin.vo.AnswerDetailsVO;
import cn.soul2.jyjc.admin.vo.AnswerSheetVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
@ -25,10 +20,7 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
import javax.transaction.Transactional;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -51,36 +43,86 @@ public class AnswerSheetRepositoryImpl extends ServiceImpl<AnswerSheetMapper, An
@Autowired
private IAnswerDetailsRepository detailsRepository;
@Autowired
private ISubjectItemsRepository subjectItemsRepository;
@Autowired
private ISubjectRepository subjectRepository;
@Override
public VPage<AnswerSheetVO> page(AnswerPageQueryDTO dto) {
LambdaQueryWrapper<AnswerSheetDO> query = Wrappers.lambdaQuery();
query.eq(StringUtils.isNotBlank(dto.getRespondent()), AnswerSheetDO::getRespondent, dto.getRespondent())
.eq(dto.getStatus() != null, AnswerSheetDO::getStatus, dto.getStatus())
.eq(StringUtils.isNotBlank(dto.getQnId()), AnswerSheetDO::getQnId, dto.getQnId())
.orderByDesc(AnswerSheetDO::getUpdatedTime).orderByDesc(AnswerSheetDO::getCreatedTime);
VPage<AnswerSheetDO> page = PageUtils.to(super.page(PageUtils.build(dto), query));
List<AnswerSheetDO> rows = page.getRows();
Set<String> qnSet = rows.stream().map(AnswerSheetDO::getQnId).collect(Collectors.toSet());
Set<String> qrSet = rows.stream().map(AnswerSheetDO::getQrId).collect(Collectors.toSet());
Map<String, QuestionnaireDO> qnMap = questionnaireRepository.listByIds(qnSet).stream().collect(Collectors.toMap(QuestionnaireDO::getId, o -> o, (o1, o2) -> o1));
Map<String, QrDO> qrMap = qrRepository.listByIds(qrSet).stream().collect(Collectors.toMap(QrDO::getId, o -> o, (o1, o2) -> o1));
Map<String, QuestionnaireDO> qnMap;
if (CollectionUtils.isNotEmpty(qnSet)) {
qnMap = questionnaireRepository.listByIds(qnSet).stream().collect(Collectors.toMap(QuestionnaireDO::getId, o -> o, (o1, o2) -> o1));
} else {
qnMap = new HashMap<>();
}
Map<String, QrDO> qrMap;
if (CollectionUtils.isNotEmpty(qrSet)) {
qrMap = qrRepository.listByIds(qrSet).stream().collect(Collectors.toMap(QrDO::getId, o -> o, (o1, o2) -> o1));
} else {
qrMap = new HashMap<>();
}
List<AnswerDetailsDO> detailsDOList = detailsRepository.listBySheetIds(rows.stream().map(AnswerSheetDO::getId).collect(Collectors.toList()));
// List<String> sids = detailsDOList.stream()
// .filter(e -> e.getSubjectType() == 0 || e.getSubjectType() == 1)
// .map(AnswerDetailsDO::getAnswerContent)
// .flatMap(ids -> Arrays.stream(ids.split(",")))
// .collect(Collectors.toList());
Map<String, SubjectDO> sMap = subjectRepository.mapByIds(detailsDOList.stream().map(AnswerDetailsDO::getSubjectId).collect(Collectors.toList()));
Map<Integer, List<String>> sidsMap = detailsDOList.stream()
.filter(e -> e.getSubjectType() == 0 || e.getSubjectType() == 1)
.collect(Collectors.groupingBy(AnswerDetailsDO::getSubjectType,
Collectors.mapping(AnswerDetailsDO::getAnswerContent, Collectors.toList())));
List<String> sids = new ArrayList<>(sidsMap.getOrDefault(0, Collections.emptyList()));
if (sidsMap.containsKey(1)) {
sids.addAll(sidsMap.get(1)
.stream().flatMap(ids -> Arrays.stream(ids.split(",")))
.collect(Collectors.toList()));
}
Map<String, SubjectItemsDO> siMap = subjectItemsRepository.mapByIds(sids);
return PageUtils.to(page, rows.stream().map(row -> {
AnswerSheetVO vo = new AnswerSheetVO();
BeanUtils.copyProperties(row, vo);
vo.setSubmitTime(row.getUpdatedTime());
if (qnMap.containsKey(row.getQnId())) {
vo.setQnName(qnMap.get(row.getQnId()).getName());
}
if (qrMap.containsKey(row.getQrId())) {
vo.setQnName(qrMap.get(row.getQrId()).getTip());
vo.setQrTip(qrMap.get(row.getQrId()).getTip());
}
vo.setDetails(detailsDOList.stream().filter(d -> d.getAnswerSheetId().equals(row.getId())).map(d -> {
AnswerDetailsVO detailsVO = new AnswerDetailsVO();
BeanUtils.copyProperties(d, detailsVO);
return detailsVO;
AnswerDetailsVO dv = new AnswerDetailsVO();
BeanUtils.copyProperties(d, dv);
dv.setType(d.getSubjectType());
if (d.getSubjectType() == 2) {
dv.setAnswerContent(d.getAnswerContent());
} else if (d.getSubjectType() == 1) {
dv.setAnswerContent(Arrays.stream(d.getAnswerContent().split(","))
.map(id -> (siMap.containsKey(id) ? siMap.get(id).getContent() : id))
.collect(Collectors.joining(",")));
} else if (d.getSubjectType() == 0) {
dv.setAnswerContent(siMap.containsKey(d.getAnswerContent()) ? siMap.get(d.getAnswerContent()).getContent() : d.getAnswerContent());
} else {
dv.setAnswerContent(d.getAnswerContent());
}
dv.setTitle(sMap.containsKey(d.getSubjectId()) ? sMap.get(d.getSubjectId()).getTitle() : "")
.setContent(sMap.containsKey(d.getSubjectId()) ? sMap.get(d.getSubjectId()).getContent() : "");
return dv;
}).collect(Collectors.toList()));
return vo;
}).collect(Collectors.toList()));
}

@ -8,7 +8,6 @@ import cn.soul2.jyjc.admin.utils.base.PageUtils;
import cn.soul2.jyjc.admin.vo.QrVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.apache.commons.lang3.StringUtils;
@ -30,7 +29,6 @@ import java.util.stream.Collectors;
@Service
public class QrRepositoryImpl extends ServiceImpl<QrMapper, QrDO> implements IQrRepository {
@Override
public VPage<QrDO> page(QrDTO dto) {
LambdaQueryWrapper<QrDO> query = Wrappers.lambdaQuery();
@ -63,9 +61,21 @@ public class QrRepositoryImpl extends ServiceImpl<QrMapper, QrDO> implements IQr
@Override
public boolean status(QrDTO status) {
LambdaUpdateWrapper<QrDO> update = Wrappers.lambdaUpdate();
QrDO qr = new QrDO();
BeanUtils.copyProperties(status, qr);
return updateById(qr);
}
@Override
public String getTo(String id) {
QrDO qr = super.getById(id);
if (qr != null) {
if (StringUtils.isNotBlank(qr.getToUrl())) {
return qr.getToUrl();
}
return qr.getQnId();
} else {
return null;
}
}
}

@ -1,5 +1,6 @@
package cn.soul2.jyjc.admin.repository.impl;
import cn.soul2.jyjc.admin.dto.QnOptionsDTO;
import cn.soul2.jyjc.admin.dto.QuestionnaireDTO;
import cn.soul2.jyjc.admin.dto.base.UpdateStatusDTO;
import cn.soul2.jyjc.admin.entity.QuestionnaireDO;
@ -7,6 +8,7 @@ import cn.soul2.jyjc.admin.mapper.QuestionnaireMapper;
import cn.soul2.jyjc.admin.repository.IQuestionnaireRepository;
import cn.soul2.jyjc.admin.utils.base.PageUtils;
import cn.soul2.jyjc.admin.vo.QuestionnaireVO;
import cn.soul2.jyjc.admin.vo.base.OptionsVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@ -17,6 +19,9 @@ import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@ -74,4 +79,20 @@ public class QuestionnaireRepositoryImpl extends ServiceImpl<QuestionnaireMapper
query.orderByDesc(QuestionnaireDO::getUpdatedTime);
return super.getOne(query);
}
@Override
public List<OptionsVO> options(QnOptionsDTO dto) {
LambdaQueryWrapper<QuestionnaireDO> query = Wrappers.lambdaQuery();
query.select(QuestionnaireDO::getId, QuestionnaireDO::getName)
.eq(dto.getStatus() != null && dto.getStatus() > 0, QuestionnaireDO::getStatus, dto.getStatus())
.orderByDesc(QuestionnaireDO::getUpdatedTime)
.orderByDesc(QuestionnaireDO::getCreatedTime);
return super.list(query).stream().map(q -> new OptionsVO().setCode(q.getId()).setLabel(q.getName()).setTime(q.getUpdatedTime())).collect(Collectors.toList());
}
@Override
public Map<String, QuestionnaireDO> mapByIds(Collection<String> ids) {
List<QuestionnaireDO> list = listByIds(ids);
return list.stream().collect(Collectors.toMap(QuestionnaireDO::getId, o -> o, (o1, o2) -> o1));
}
}

@ -100,6 +100,7 @@ public class RefSubjectItemsRepositoryImpl extends ServiceImpl<RefSubjectItemsMa
return removed;
}
@Override
public Integer updateRef(String subjectId, Collection<String> newItemIds) {
return null;

@ -14,6 +14,8 @@ import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
@ -46,6 +48,11 @@ public class SubjectItemsRepositoryImpl extends ServiceImpl<SubjectItemsMapper,
return super.list(query);
}
@Override
public Map<String, SubjectItemsDO> mapByIds(Collection<String> ids) {
return super.listByIds(ids).stream().collect(Collectors.toMap(SubjectItemsDO::getId, o -> o, (o1, o2) -> o1));
}
@Override
public Boolean removeBySubjectId(Collection<String> subjectIds) {
LambdaUpdateWrapper<SubjectItemsDO> update = Wrappers.lambdaUpdate();

@ -154,5 +154,8 @@ public class SubjectRepositoryImpl extends ServiceImpl<SubjectMapper, SubjectDO>
return PageUtils.to(subjectMapper.useCounts(PageUtils.build(dto), query, dto.getQnId()));
}
@Override
public Map<String, SubjectDO> mapByIds(Collection<String> ids) {
return super.listByIds(ids).stream().collect(Collectors.toMap(SubjectDO::getId, o -> o, (o1, o2) -> o1));
}
}

@ -1,6 +1,9 @@
package cn.soul2.jyjc.admin.service;
import cn.soul2.jyjc.admin.dto.AnswerPageQueryDTO;
import cn.soul2.jyjc.admin.dto.AnswerSubmitDTO;
import cn.soul2.jyjc.admin.vo.AnswerSheetVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
/**
* @author Soul2
@ -17,4 +20,12 @@ public interface IAnswerService {
*/
Boolean handleSubmit(AnswerSubmitDTO dto);
/**
* 分页查询
*
* @param dto 查询条件
* @return {@link VPage}<{@link AnswerSheetVO}>
*/
VPage<AnswerSheetVO> page(AnswerPageQueryDTO dto);
}

@ -1,11 +1,14 @@
package cn.soul2.jyjc.admin.service.impl;
import cn.soul2.jyjc.admin.dto.AnswerPageQueryDTO;
import cn.soul2.jyjc.admin.dto.AnswerSubmitDTO;
import cn.soul2.jyjc.admin.entity.AnswerDetailsDO;
import cn.soul2.jyjc.admin.entity.AnswerSheetDO;
import cn.soul2.jyjc.admin.repository.IAnswerDetailsRepository;
import cn.soul2.jyjc.admin.repository.IAnswerSheetRepository;
import cn.soul2.jyjc.admin.service.IAnswerService;
import cn.soul2.jyjc.admin.vo.AnswerSheetVO;
import cn.soul2.jyjc.admin.vo.base.VPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -55,4 +58,9 @@ public class AnswerServiceImpl implements IAnswerService {
}
return Boolean.TRUE;
}
@Override
public VPage<AnswerSheetVO> page(AnswerPageQueryDTO dto) {
return sheetRepository.page(dto);
}
}

@ -11,6 +11,7 @@ import cn.soul2.jyjc.admin.service.ISubjectService;
import cn.soul2.jyjc.admin.vo.SubjectItemVO;
import cn.soul2.jyjc.admin.vo.SubjectVO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
@ -49,6 +50,9 @@ public class SubjectServiceImpl implements ISubjectService {
List<RefQuestionnaireSubjectDO> refs = refQuestionnaireSubjectRepository.list(query);
Set<String> idSet = refs.stream().map(RefQuestionnaireSubjectDO::getSubjectId).collect(Collectors.toSet());
List<SubjectItemsDO> itemsDos = itemsRepository.listBySubjectIds(idSet);
if (CollectionUtils.isEmpty(idSet)) {
return new ArrayList<>();
}
List<SubjectDO> list = subjectRepository.listByIds(idSet);
return list.stream().map(e -> {
SubjectVO vo = new SubjectVO();

@ -30,7 +30,7 @@ public class AnswerDetailsVO {
/**
* 题目类型:0-单选;1-多选;2-文字
*/
private Short type;
private Integer type;
/**
* 回答内容(文字/选项)

@ -0,0 +1,32 @@
package cn.soul2.jyjc.admin.vo;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.List;
/**
* @author Soul2
* @date 2024-05-10 12:46
*/
@Data
@Accessors(chain = true)
public class AnswerPageVO {
/**
* qnId
*/
private String qnId;
/**
* qnName
*/
private String qnName;
/**
* sheets
*/
private List<AnswerSheetVO> sheets;
}

@ -1,8 +1,10 @@
package cn.soul2.jyjc.admin.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -44,6 +46,12 @@ public class AnswerSheetVO {
*/
private List<AnswerDetailsVO> details;
/**
* 提交时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime submitTime;
/**
* 答卷人
*/

@ -50,4 +50,9 @@ public class QrVO {
* 二维码url
*/
private String qrUrl;
/**
* 指向名称
*/
private String qnName;
}

@ -0,0 +1,34 @@
package cn.soul2.jyjc.admin.vo.base;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.experimental.Accessors;
import java.time.LocalDateTime;
/**
* @author Soul2
* @date 2024-05-10 15:07
*/
@Data
@Accessors(chain = true)
public class OptionsVO {
/**
* code
*/
private String code;
/**
* label
*/
private String label;
/**
* date time
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime time;
}
Loading…
Cancel
Save