diff --git a/.gitignore b/.gitignore index 32de00b..e8d11a0 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,4 @@ build/ ### VS Code ### .vscode/ /.mvn/ +/logs/ diff --git a/src/main/java/cn/soul2/jyjc/admin/controller/AnswerController.java b/src/main/java/cn/soul2/jyjc/admin/controller/AnswerController.java index 3dd0c9e..0e5e5e0 100644 --- a/src/main/java/cn/soul2/jyjc/admin/controller/AnswerController.java +++ b/src/main/java/cn/soul2/jyjc/admin/controller/AnswerController.java @@ -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> page(@RequestBody AnswerPageQueryDTO dto) { + return BackUtils.success(answerService.page(dto)); + } + + } diff --git a/src/main/java/cn/soul2/jyjc/admin/controller/QrController.java b/src/main/java/cn/soul2/jyjc/admin/controller/QrController.java index 5eee768..461b042 100644 --- a/src/main/java/cn/soul2/jyjc/admin/controller/QrController.java +++ b/src/main/java/cn/soul2/jyjc/admin/controller/QrController.java @@ -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> page(@RequestBody QrDTO dto) { VPage page = qrRepository.page(dto); + Map map = questionnaireRepository.mapByIds(page.getRows().stream().map(QrDO::getQnId).collect(Collectors.toSet())); VPage 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 qrQuery(@PathVariable String query) { + return BackUtils.success(qrRepository.getTo(query)); + } } diff --git a/src/main/java/cn/soul2/jyjc/admin/controller/QuestionnaireController.java b/src/main/java/cn/soul2/jyjc/admin/controller/QuestionnaireController.java index bde59e7..51c56b6 100644 --- a/src/main/java/cn/soul2/jyjc/admin/controller/QuestionnaireController.java +++ b/src/main/java/cn/soul2/jyjc/admin/controller/QuestionnaireController.java @@ -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> options(@RequestBody QnOptionsDTO dto) { + return BackUtils.success(questionnaireRepository.options(dto)); + } + } diff --git a/src/main/java/cn/soul2/jyjc/admin/controller/SubjectController.java b/src/main/java/cn/soul2/jyjc/admin/controller/SubjectController.java index 084060e..10c05ad 100644 --- a/src/main/java/cn/soul2/jyjc/admin/controller/SubjectController.java +++ b/src/main/java/cn/soul2/jyjc/admin/controller/SubjectController.java @@ -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> getSubject(@RequestBody GetSubjectDTO dto) { if (StringUtils.isBlank(dto.getQnId())) { QuestionnaireDO qn = questionnaireRepository.getTheLatestOne(); diff --git a/src/main/java/cn/soul2/jyjc/admin/dto/AnswerPageQueryDTO.java b/src/main/java/cn/soul2/jyjc/admin/dto/AnswerPageQueryDTO.java index 16d01a5..ec3ac70 100644 --- a/src/main/java/cn/soul2/jyjc/admin/dto/AnswerPageQueryDTO.java +++ b/src/main/java/cn/soul2/jyjc/admin/dto/AnswerPageQueryDTO.java @@ -23,4 +23,9 @@ public class AnswerPageQueryDTO extends PageParams { */ private String respondent; + /** + * qnId + */ + private String qnId; + } diff --git a/src/main/java/cn/soul2/jyjc/admin/dto/AnswerSheetQueryDTO.java b/src/main/java/cn/soul2/jyjc/admin/dto/AnswerSheetQueryDTO.java new file mode 100644 index 0000000..94ea3d0 --- /dev/null +++ b/src/main/java/cn/soul2/jyjc/admin/dto/AnswerSheetQueryDTO.java @@ -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; + +} diff --git a/src/main/java/cn/soul2/jyjc/admin/dto/QnOptionsDTO.java b/src/main/java/cn/soul2/jyjc/admin/dto/QnOptionsDTO.java new file mode 100644 index 0000000..0edd160 --- /dev/null +++ b/src/main/java/cn/soul2/jyjc/admin/dto/QnOptionsDTO.java @@ -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; + + +} diff --git a/src/main/java/cn/soul2/jyjc/admin/interceptor/FinallyInterceptor.java b/src/main/java/cn/soul2/jyjc/admin/interceptor/FinallyInterceptor.java index 4806d09..279b8e1 100644 --- a/src/main/java/cn/soul2/jyjc/admin/interceptor/FinallyInterceptor.java +++ b/src/main/java/cn/soul2/jyjc/admin/interceptor/FinallyInterceptor.java @@ -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)); diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/IQrRepository.java b/src/main/java/cn/soul2/jyjc/admin/repository/IQrRepository.java index 9e4dcab..7e33586 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/IQrRepository.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/IQrRepository.java @@ -24,6 +24,14 @@ public interface IQrRepository extends IService { Boolean remove(Collection ids); - boolean status(QrDTO status); + + /** + * 从二维码id读取跳转目标 + * url的优先级大于问卷id + * + * @param id 二维码id + * @return {@link String} + */ + String getTo(String id); } diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/IQuestionnaireRepository.java b/src/main/java/cn/soul2/jyjc/admin/repository/IQuestionnaireRepository.java index 7d9cabd..78c9c9b 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/IQuestionnaireRepository.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/IQuestionnaireRepository.java @@ -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; + /** *

* 问卷表 服务类 @@ -49,4 +55,9 @@ public interface IQuestionnaireRepository extends IService { */ QuestionnaireDO getTheLatestOne(); + List options(QnOptionsDTO dto); + + + Map mapByIds(Collection ids); + } diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectItemsRepository.java b/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectItemsRepository.java index c0cb4a1..6d95c7d 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectItemsRepository.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectItemsRepository.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import java.util.Collection; import java.util.List; +import java.util.Map; /** *

@@ -32,6 +33,8 @@ public interface ISubjectItemsRepository extends IService { */ List listBySubjectIds(Collection subjectIds); + Map mapByIds(Collection ids); + /** * 删除指定题目id下的所有选项 * diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectRepository.java b/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectRepository.java index 44fdb0b..28e288a 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectRepository.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/ISubjectRepository.java @@ -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; /** *

@@ -62,4 +63,6 @@ public interface ISubjectRepository extends IService { */ VPage chooseList(QnSubjectRefItemDTO dto); + Map mapByIds(Collection ids); + } diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/impl/AnswerSheetRepositoryImpl.java b/src/main/java/cn/soul2/jyjc/admin/repository/impl/AnswerSheetRepositoryImpl.java index be37efe..7b3a117 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/impl/AnswerSheetRepositoryImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/impl/AnswerSheetRepositoryImpl.java @@ -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 page(AnswerPageQueryDTO dto) { LambdaQueryWrapper 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 page = PageUtils.to(super.page(PageUtils.build(dto), query)); List rows = page.getRows(); Set qnSet = rows.stream().map(AnswerSheetDO::getQnId).collect(Collectors.toSet()); Set qrSet = rows.stream().map(AnswerSheetDO::getQrId).collect(Collectors.toSet()); - Map qnMap = questionnaireRepository.listByIds(qnSet).stream().collect(Collectors.toMap(QuestionnaireDO::getId, o -> o, (o1, o2) -> o1)); - Map qrMap = qrRepository.listByIds(qrSet).stream().collect(Collectors.toMap(QrDO::getId, o -> o, (o1, o2) -> o1)); + Map 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 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 detailsDOList = detailsRepository.listBySheetIds(rows.stream().map(AnswerSheetDO::getId).collect(Collectors.toList())); +// List sids = detailsDOList.stream() +// .filter(e -> e.getSubjectType() == 0 || e.getSubjectType() == 1) +// .map(AnswerDetailsDO::getAnswerContent) +// .flatMap(ids -> Arrays.stream(ids.split(","))) +// .collect(Collectors.toList()); + Map sMap = subjectRepository.mapByIds(detailsDOList.stream().map(AnswerDetailsDO::getSubjectId).collect(Collectors.toList())); + + Map> sidsMap = detailsDOList.stream() + .filter(e -> e.getSubjectType() == 0 || e.getSubjectType() == 1) + .collect(Collectors.groupingBy(AnswerDetailsDO::getSubjectType, + Collectors.mapping(AnswerDetailsDO::getAnswerContent, Collectors.toList()))); + + List 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 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())); } diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/impl/QrRepositoryImpl.java b/src/main/java/cn/soul2/jyjc/admin/repository/impl/QrRepositoryImpl.java index 554c459..dd34564 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/impl/QrRepositoryImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/impl/QrRepositoryImpl.java @@ -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 implements IQrRepository { - @Override public VPage page(QrDTO dto) { LambdaQueryWrapper query = Wrappers.lambdaQuery(); @@ -63,9 +61,21 @@ public class QrRepositoryImpl extends ServiceImpl implements IQr @Override public boolean status(QrDTO status) { - LambdaUpdateWrapper 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; + } + } } diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/impl/QuestionnaireRepositoryImpl.java b/src/main/java/cn/soul2/jyjc/admin/repository/impl/QuestionnaireRepositoryImpl.java index 393b568..d49a736 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/impl/QuestionnaireRepositoryImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/impl/QuestionnaireRepositoryImpl.java @@ -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 options(QnOptionsDTO dto) { + LambdaQueryWrapper 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 mapByIds(Collection ids) { + List list = listByIds(ids); + return list.stream().collect(Collectors.toMap(QuestionnaireDO::getId, o -> o, (o1, o2) -> o1)); + } } diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/impl/RefSubjectItemsRepositoryImpl.java b/src/main/java/cn/soul2/jyjc/admin/repository/impl/RefSubjectItemsRepositoryImpl.java index 18b7b8a..13862d8 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/impl/RefSubjectItemsRepositoryImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/impl/RefSubjectItemsRepositoryImpl.java @@ -100,6 +100,7 @@ public class RefSubjectItemsRepositoryImpl extends ServiceImpl newItemIds) { return null; diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectItemsRepositoryImpl.java b/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectItemsRepositoryImpl.java index be84c99..11aa742 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectItemsRepositoryImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectItemsRepositoryImpl.java @@ -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; /** *

@@ -46,6 +48,11 @@ public class SubjectItemsRepositoryImpl extends ServiceImpl mapByIds(Collection ids) { + return super.listByIds(ids).stream().collect(Collectors.toMap(SubjectItemsDO::getId, o -> o, (o1, o2) -> o1)); + } + @Override public Boolean removeBySubjectId(Collection subjectIds) { LambdaUpdateWrapper update = Wrappers.lambdaUpdate(); diff --git a/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectRepositoryImpl.java b/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectRepositoryImpl.java index 17f4f36..a61f80e 100644 --- a/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectRepositoryImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/repository/impl/SubjectRepositoryImpl.java @@ -154,5 +154,8 @@ public class SubjectRepositoryImpl extends ServiceImpl return PageUtils.to(subjectMapper.useCounts(PageUtils.build(dto), query, dto.getQnId())); } - + @Override + public Map mapByIds(Collection ids) { + return super.listByIds(ids).stream().collect(Collectors.toMap(SubjectDO::getId, o -> o, (o1, o2) -> o1)); + } } diff --git a/src/main/java/cn/soul2/jyjc/admin/service/IAnswerService.java b/src/main/java/cn/soul2/jyjc/admin/service/IAnswerService.java index 7dbe407..cf013a7 100644 --- a/src/main/java/cn/soul2/jyjc/admin/service/IAnswerService.java +++ b/src/main/java/cn/soul2/jyjc/admin/service/IAnswerService.java @@ -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 page(AnswerPageQueryDTO dto); + } diff --git a/src/main/java/cn/soul2/jyjc/admin/service/impl/AnswerServiceImpl.java b/src/main/java/cn/soul2/jyjc/admin/service/impl/AnswerServiceImpl.java index 39bb0dd..d4efc56 100644 --- a/src/main/java/cn/soul2/jyjc/admin/service/impl/AnswerServiceImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/service/impl/AnswerServiceImpl.java @@ -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 page(AnswerPageQueryDTO dto) { + return sheetRepository.page(dto); + } } diff --git a/src/main/java/cn/soul2/jyjc/admin/service/impl/SubjectServiceImpl.java b/src/main/java/cn/soul2/jyjc/admin/service/impl/SubjectServiceImpl.java index 8d8bf63..902bc31 100644 --- a/src/main/java/cn/soul2/jyjc/admin/service/impl/SubjectServiceImpl.java +++ b/src/main/java/cn/soul2/jyjc/admin/service/impl/SubjectServiceImpl.java @@ -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 refs = refQuestionnaireSubjectRepository.list(query); Set idSet = refs.stream().map(RefQuestionnaireSubjectDO::getSubjectId).collect(Collectors.toSet()); List itemsDos = itemsRepository.listBySubjectIds(idSet); + if (CollectionUtils.isEmpty(idSet)) { + return new ArrayList<>(); + } List list = subjectRepository.listByIds(idSet); return list.stream().map(e -> { SubjectVO vo = new SubjectVO(); diff --git a/src/main/java/cn/soul2/jyjc/admin/vo/AnswerDetailsVO.java b/src/main/java/cn/soul2/jyjc/admin/vo/AnswerDetailsVO.java index 081a25b..3645252 100644 --- a/src/main/java/cn/soul2/jyjc/admin/vo/AnswerDetailsVO.java +++ b/src/main/java/cn/soul2/jyjc/admin/vo/AnswerDetailsVO.java @@ -30,7 +30,7 @@ public class AnswerDetailsVO { /** * 题目类型:0-单选;1-多选;2-文字 */ - private Short type; + private Integer type; /** * 回答内容(文字/选项) diff --git a/src/main/java/cn/soul2/jyjc/admin/vo/AnswerPageVO.java b/src/main/java/cn/soul2/jyjc/admin/vo/AnswerPageVO.java new file mode 100644 index 0000000..a762dd7 --- /dev/null +++ b/src/main/java/cn/soul2/jyjc/admin/vo/AnswerPageVO.java @@ -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 sheets; + +} diff --git a/src/main/java/cn/soul2/jyjc/admin/vo/AnswerSheetVO.java b/src/main/java/cn/soul2/jyjc/admin/vo/AnswerSheetVO.java index 3dcef2d..4630b4c 100644 --- a/src/main/java/cn/soul2/jyjc/admin/vo/AnswerSheetVO.java +++ b/src/main/java/cn/soul2/jyjc/admin/vo/AnswerSheetVO.java @@ -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 details; + /** + * 提交时间 + */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime submitTime; + /** * 答卷人 */ diff --git a/src/main/java/cn/soul2/jyjc/admin/vo/QrVO.java b/src/main/java/cn/soul2/jyjc/admin/vo/QrVO.java index b8a6b22..2f4fdc9 100644 --- a/src/main/java/cn/soul2/jyjc/admin/vo/QrVO.java +++ b/src/main/java/cn/soul2/jyjc/admin/vo/QrVO.java @@ -50,4 +50,9 @@ public class QrVO { * 二维码url */ private String qrUrl; + + /** + * 指向名称 + */ + private String qnName; } diff --git a/src/main/java/cn/soul2/jyjc/admin/vo/base/OptionsVO.java b/src/main/java/cn/soul2/jyjc/admin/vo/base/OptionsVO.java new file mode 100644 index 0000000..c1d4fe4 --- /dev/null +++ b/src/main/java/cn/soul2/jyjc/admin/vo/base/OptionsVO.java @@ -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; + +}